Jawaban:
Cakupan 'isolate' mengambil hash objek yang mendefinisikan sekumpulan properti lingkup lokal yang diturunkan dari cakupan induk. Properti lokal ini berguna untuk menambahkan nilai untuk template. Definisi lokal adalah hash properti lingkup lokal ke sumbernya:
=atau=attr- mengatur ikatan dua arah antara properti lingkup lokal dan properti lingkup induk dari nama yang ditentukan melalui nilaiattratribut. Jika tidak adaattrnama yang ditentukan maka nama atribut diasumsikan sama dengan nama lokal. Diberikan<widget my-attr="parentModel">dan definisi widgetscope: { localModel:'=myAttr' }, maka properti lingkup widgetlocalModelakan mencerminkan nilaiparentModelpada lingkup induk. Setiap perubahanparentModelakan tercermin dalamlocalModeldan setiap perubahanlocalModelakan tercermin dalamparentModel. Jika properti lingkup induk tidak ada, itu akan melempar pengecualian NON_ASSIGNABLE_MODEL_EXPRESSION. Anda dapat menghindari perilaku ini menggunakan=?atau=?attruntuk menandai properti sebagai opsional.
Itu harus memicu kesalahan yang diharapkan pada setiap intisari yang mempengaruhi properti lingkup:
parentSet = parentGet.assign || function() {
// reset the change, or we will throw this exception on every $digest
lastValue = scope[scopeName] = parentGet(parentScope);
throw Error(NON_ASSIGNABLE_MODEL_EXPRESSION + attrs[attrName] +
' (directive: ' + newScopeDirective.name + ')');
};
//...
if (parentValue !== scope[scopeName]) {
// we are out of sync and need to copy
if (parentValue !== lastValue) {
// parent changed and it has precedence
lastValue = scope[scopeName] = parentValue;
} else {
// if the parent can be assigned then do so
parentSet(parentScope, lastValue = scope[scopeName]);
}
}