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