Имеет ли вопросительный знак после «равно» особое значение? то есть:
scope: {foo: '=?'}
означает ли вышесказанное «не вызывать ошибку, если« foo »не может быть разрешено?
источник
Имеет ли вопросительный знак после «равно» особое значение? то есть:
scope: {foo: '=?'}
означает ли вышесказанное «не вызывать ошибку, если« foo »не может быть разрешено?
«Изолированная» область принимает хэш объекта, который определяет набор свойств локальной области, полученных из родительской области. Эти локальные свойства полезны для создания псевдонимов значений для шаблонов. Определение локальных переменных - это хэш свойства локальной области его источника:
=
или=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]);
}
}