Ответы:
«Изолированная» область принимает хэш объекта, который определяет набор свойств локальной области, полученных из родительской области. Эти локальные свойства полезны для создания псевдонимов значений для шаблонов. Определение локальных переменных - это хэш свойства локальной области его источника:
=
или=attr
- установить двунаправленную привязку между свойством локальной области и свойством родительской области с именем, определенным через значениеattr
атрибута. Еслиattr
имя не указано, предполагается, что имя атрибута совпадает с локальным именем. Учитывая<widget my-attr="parentModel">
и определение виджетаscope: { localModel:'=myAttr' }
, тогда свойство области виджетаlocalModel
будет отражать значениеparentModel
в родительской области. Любые изменения вparentModel
будут отражены в,localModel
а любые измененияlocalModel
вparentModel
. Если свойство родительской области не существует, оно вызовет исключение NON_ASSIGNABLE_MODEL_EXPRESSION. Вы можете избежать этого поведения, используя=?
или=?attr
, чтобы пометить свойство как необязательное.
Он должен вызывать ожидаемую ошибку для каждого дайджеста, который влияет на свойство области:
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]);
}
}