Apa cara termudah untuk melewatkan variabel lingkup AngularJS dari direktif ke pengontrol? Semua contoh yang saya lihat tampak begitu rumit, bukankah ada cara saya dapat mengakses pengontrol dari arahan, dan menetapkan salah satu variabel cakupannya?
angularjs
angularjs-directive
ng-controller
winduptoy
sumber
sumber
Jawaban:
Diedit pada 2014/8/25: Di sinilah saya mem-forknya .
Terima kasih @anvarik.
Inilah JSFiddle . Saya lupa di mana saya bercabang ini. Tapi ini adalah contoh bagus yang menunjukkan perbedaan antara = dan @
sumber
Tunggu sampai angular mengevaluasi variabel
Saya telah banyak mengotak-atik ini, dan tidak bisa membuatnya bekerja bahkan dengan variabel yang ditentukan
"="
dalam ruang lingkup. Berikut tiga solusi tergantung pada situasi Anda.Solusi # 1
Saya menemukan bahwa variabel belum dievaluasi oleh angular ketika diteruskan ke direktif. Ini berarti Anda dapat mengakses dan menggunakannya di template, tetapi tidak di dalam link atau fungsi pengontrol aplikasi kecuali kita menunggu untuk dievaluasi.
Jika variabel Anda berubah , atau diambil melalui permintaan, Anda harus menggunakan
$observe
atau$watch
:Dan inilah htmlnya (ingat tanda kurung!):
Perhatikan bahwa Anda tidak boleh menyetel variabel ke
"="
dalam cakupan, jika Anda menggunakan$observe
fungsi tersebut. Juga, saya menemukan bahwa ia melewatkan objek sebagai string, jadi jika Anda mengirimkan objek gunakan solusi # 2 atauscope.$watch(attrs.yourDirective, fn)
(, atau # 3 jika variabel Anda tidak berubah).Solusi # 2
Jika variabel Anda dibuat di misalnya pengontrol lain , tetapi hanya perlu menunggu sampai angular telah mengevaluasinya sebelum mengirimkannya ke pengontrol aplikasi, kita dapat menggunakan
$timeout
untuk menunggu hingga$apply
telah dijalankan. Juga kita perlu menggunakan$emit
untuk mengirimkannya ke pengontrol aplikasi lingkup induk (karena lingkup terisolasi dalam direktif):Dan inilah htmlnya (tanpa tanda kurung!):
Solusi # 3
Jika variabel Anda tidak berubah dan Anda perlu mengevaluasinya dalam direktif Anda, Anda dapat menggunakan
$eval
fungsi:Dan inilah htmlnya (ingat tanda kurung!):
Juga, lihat jawaban ini: https://stackoverflow.com/a/12372494/1008519
Referensi untuk masalah FOUC (flash konten tanpa gaya): http://deansofer.com/posts/view/14/AngularJs-Tips-and-Tricks-UPDATED
Untuk yang tertarik: inilah artikel tentang siklus hidup sudut
sumber
ng-if="someObject.someVariable"
direktif sederhana (atau elemen dengan direktif sebagai atribut) sudah cukup - direktif berlaku hanya setelahsomeObject.someVariable
ditentukan.