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 nilaiattr
atribut. Jika tidak adaattr
nama yang ditentukan maka nama atribut diasumsikan sama dengan nama lokal. Diberikan<widget my-attr="parentModel">
dan definisi widgetscope: { localModel:'=myAttr' }
, maka properti lingkup widgetlocalModel
akan mencerminkan nilaiparentModel
pada lingkup induk. Setiap perubahanparentModel
akan tercermin dalamlocalModel
dan setiap perubahanlocalModel
akan tercermin dalamparentModel
. Jika properti lingkup induk tidak ada, itu akan melempar pengecualian NON_ASSIGNABLE_MODEL_EXPRESSION. Anda dapat menghindari perilaku ini menggunakan=?
atau=?attr
untuk 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]);
}
}