Pertama, apa yang Anda amati tidak ada hubungannya dengan <
pengikatan.
Masalahnya adalah ekspresi {{hello}}
di dalam kedua arahan bukan bagian dari templat arahan ini. Dan untuk elemen seperti itu, aturan pengikatannya berbeda.
Angular secara otomatis membuat fungsi tautan untuk ekspresi {{hello}}
. Namun cakupan evaluasi fungsi tautan ini berbeda dalam kasus Anda.
Yang mungkin Anda harapkan adalah ini:
rootScope
/ \
/ \
attr-dir-new-scope one-way-isoloate-scope
/ \
/ \
{{hello}} {{hello}}
Namun, menurut komentar ini di sumber sebuah>:
// Kita hanya meneruskan lingkup isolasi, jika direktif isolasi memiliki templat,
// jika tidak, elemen turunan tidak termasuk dalam direktif isolasi.
gambaran sebenarnya adalah ini:
root scope
/ \ \
/ \ \
attr-dir-new-scope \ one-way-isoloate-scope
/ \
/ \
{{hello}} {{hello}}
Jadi dalam contoh Anda, direktif pertama <attr-dir>
tidak membuat cakupan isolasi, tetapi membuat cakupan baru, jadi ketika menghubungkan sudut, teruskan cakupan baru ini ke fungsi penautan direktif Anda:
link: function(scope){
scope.hello = 'attrDir';
}
dan ke fungsi penautan yang dibuat untuk ekspresi {{hello}}
. Itu sebabnya ketika Anda menambahkan nilai dalam fungsi penautan, nilai tersebut tersedia di fungsi penautan ekspresi.
Namun arahan kedua Anda <one-way>
menciptakan cakupan terisolasi dan menurut komentar yang saya sebutkan di atas, fungsi penautan dari arahan tersebut mendapatkan cakupan terisolasi sebagaimana mestinya, tetapi fungsi penautan dari ekspresi menerima cakupan berbeda (cakupan root dalam contoh Anda). Jadi, Anda menambahkan nilai hello
pada cakupan yang berbeda. Itu sebabnya nilainya tidak terdefinisi.
person
Max Koretskyi
schedule
11.03.2017
one way !== isolated scopes
. - person lin   schedule 11.03.2017