Saya sangat baru di AngularJS. Adakah yang bisa menjelaskan perbedaan antara operator AngularJS ini: &, @ and =
ketika mengisolasi ruang lingkup dengan contoh yang tepat.
javascript
angularjs
Nur Rony
sumber
sumber
Jawaban:
@
memungkinkan nilai yang didefinisikan pada atribut direktif untuk diteruskan ke ruang lingkup direktif direktif. Nilainya bisa berupa nilai string sederhana (myattr="hello"
) atau bisa juga string yang diinterpolasi AngularJS dengan ekspresi yang tertanam (myattr="my_{{helloText}}"
). Anggap saja sebagai komunikasi "satu arah" dari ruang lingkup orang tua ke dalam arahan anak. John Lindquist memiliki serangkaian screencasts pendek yang menjelaskan masing-masing. Screencast pada @ ada di sini: https://egghead.io/lessons/angularjs-isolate-scope-attribute-binding&
memungkinkan lingkup isolat direktif untuk meneruskan nilai ke lingkup induk untuk evaluasi dalam ekspresi yang didefinisikan dalam atribut. Perhatikan bahwa atribut direktif secara implisit merupakan ekspresi dan tidak menggunakan sintaks ekspresi kurawal ganda. Yang ini lebih sulit untuk dijelaskan dalam teks. Screencast pada & ada di sini: https://egghead.io/lessons/angularjs-isolate-scope-expression-binding=
mengatur ekspresi pengikatan dua arah antara ruang lingkup direktif direktif dan ruang lingkup induk. Perubahan dalam lingkup anak disebarkan ke orang tua dan sebaliknya. Pikirkan = sebagai kombinasi @ dan &. Screencast on = ada di sini: https://egghead.io/lessons/angularjs-isolate-scope-two-way-bindingDan akhirnya di sini adalah screencast yang menunjukkan ketiganya digunakan bersama dalam satu tampilan: https://egghead.io/lessons/angularjs-isolate-scope-review
sumber
Saya ingin menjelaskan konsep-konsep dari perspektif warisan prototipe JavaScript. Semoga membantu mengerti.
Ada tiga opsi untuk menentukan ruang lingkup arahan:
scope: false
: Default sudut. Ruang lingkup direktif adalah persis salah satu ruang lingkup induknya (parentScope
).scope: true
: Angular menciptakan ruang lingkup untuk arahan ini. Cakupan prototipically mewarisi dariparentScope
.scope: {...}
: lingkup terisolasi dijelaskan di bawah ini.Menentukan
scope: {...}
mendefinisikan suatuisolatedScope
. AnisolatedScope
tidak mewarisi properti dariparentScope
, meskipunisolatedScope.$parent === parentScope
. Ini didefinisikan melalui:isolatedScope
tidak memiliki akses langsung keparentScope
. Tetapi kadang - kadang arahan perlu berkomunikasi denganparentScope
. Mereka berkomunikasi melalui@
,=
dan&
. Topik tentang menggunakan simbol@
,=
dan&
berbicara tentang skenario menggunakanisolatedScope
.Biasanya digunakan untuk beberapa komponen umum yang dibagikan oleh halaman yang berbeda, seperti Modals. Ruang lingkup yang terisolasi mencegah polusi ruang lingkup global dan mudah untuk dibagikan di antara halaman.
Berikut ini adalah arahan dasar: http://jsfiddle.net/7t984sf9/5/ . Gambar untuk diilustrasikan adalah:
@
: pengikatan satu arah@
cukup melewati properti dariparentScope
keisolatedScope
. Ini disebutone-way binding
, yang berarti Anda tidak dapat mengubah nilaiparentScope
properti. Jika Anda terbiasa dengan warisan JavaScript, Anda dapat memahami dua skenario ini dengan mudah:Jika properti mengikat adalah tipe primitif, seperti
interpolatedProp
dalam contoh: Anda dapat memodifikasiinterpolatedProp
, tetapiparentProp1
tidak akan diubah. Namun, jika Anda mengubah nilaiparentProp1
,interpolatedProp
akan ditimpa dengan nilai baru (saat $ angular).Jika properti yang mengikat adalah beberapa objek, seperti
parentObj
: karena yang diteruskan keisolatedScope
referensi, memodifikasi nilai akan memicu kesalahan ini:TypeError: Cannot assign to read only property 'x' of {"x":1,"y":2}
=
: mengikat dua arah=
dipanggiltwo-way binding
, yang berarti setiap modifikasi dalamchildScope
juga akan memperbarui nilai dalamparentScope
, dan sebaliknya. Aturan ini berfungsi untuk primitif dan objek. Jika Anda mengubah jenis pengikatanparentObj
menjadi=
, Anda akan menemukan bahwa Anda dapat mengubah nilaiparentObj.x
. Contoh tipikal adalahngModel
.&
: fungsi mengikat&
memungkinkan direktif untuk memanggil beberapaparentScope
fungsi dan meneruskan beberapa nilai dari direktif. Misalnya, periksa JSFiddle: & dalam ruang lingkup direktif .Tetapkan template yang dapat diklik dalam direktif seperti:
Dan gunakan arahan seperti:
Variabel
valueFromDirective
dilewatkan dari direktif ke pengendali induk melalui{valueFromDirective: ...
.Referensi: Memahami Lingkup
sumber
Bukan biola saya, tetapi http://jsfiddle.net/maxisam/QrCXh/ menunjukkan perbedaannya. Bagian kuncinya adalah:
sumber
@ : penjilidan satu arah
= : penjilidan dua arah
& : mengikat fungsi
sumber
AngularJS - Lingkup Terisolasi - @ vs = vs &
Contoh singkat dengan penjelasan tersedia di tautan di bawah ini:
http://www.codeforeach.com/angularjs/angularjs-isolated-scopes-vs-vs
@ - satu arah mengikat
Dalam arahan:
Dalam penglihatan:
= - mengikat dua arah
Dalam arahan:
Dalam penglihatan:
& - Panggilan fungsi
Dalam arahan:
Dalam penglihatan:
sumber
Butuh waktu sangat lama bagi saya untuk benar-benar memahami hal ini. Kunci bagi saya adalah memahami bahwa "@" adalah untuk hal-hal yang ingin Anda evaluasi in situ dan diteruskan ke arahan sebagai konstanta di mana "=" benar-benar melewati objek itu sendiri.
Ada posting blog yang bagus yang menjelaskan hal ini di: http://blog.ramses.io/technical/AngularJS-the-difference-between-@-&-and-=-when-dclaring-directives-using-isolate-scopes
sumber