AngularJS 指令隔离作用域声明中“ = ?”的含义是什么?

等号后面的问号有特殊含义吗? 例如:

scope: {foo: '=?'}

上述是否表示「如果不能解决「 foo 」 ,请不要提出错误? 」?

61505 次浏览

是的:

“隔离”作用域接受一个对象散列,该散列定义从父作用域派生的一组局部作用域属性。这些本地属性对于模板的别名值很有用。Locals 定义是局部范围属性到其源的哈希值:

==attr-在局部作用域之间建立双向绑定 属性和通过值定义的名称的父范围属性 如果没有指定 attr名称,则 假定属性名与本地名相同 <widget my-attr="parentModel">和 < code > scope 的小部件定义: { LocalModel:’= myAttr’} ,然后小部件范围属性 localModel将 在父作用域上反映 parentModel的值 parentModel将反映在 localModel和任何变化 localModel将反映在 parentModel中。 如果父范围 属性不存在,它将引发一个 NON _ ASSIGNABLE _ MODEL _ Expression 异常。可以避免此行为 使用 =?=?attr将属性标记为可选的。

它应该在影响 scope 属性的每个摘要上触发预期的错误:

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]);
}
}