【发布时间】:2013-12-25 05:08:36
【问题描述】:
equals后面的问号有特殊含义吗?即:
scope: {foo: '=?'}
上面的意思是“如果 'foo' 无法解决,就不要引发错误吗?
【问题讨论】:
标签: angularjs angularjs-directive
equals后面的问号有特殊含义吗?即:
scope: {foo: '=?'}
上面的意思是“如果 'foo' 无法解决,就不要引发错误吗?
【问题讨论】:
标签: angularjs angularjs-directive
“隔离”作用域采用对象散列,该散列定义了一组从父作用域派生的本地作用域属性。这些本地属性对于模板的别名值很有用。本地定义是本地范围属性到其源的哈希:
=或=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]);
}
}
【讨论】: