“=”是什么意思? 在angularJS指令隔离范围声明?
平等之后的问号是否有特殊意义? 即:
scope: {foo: '=?'}
上面的意思是'不要提出错误,如果'富'不能解决?
是:
'isolate'作用域需要一个对象散列,它定义了从父作用域派生的一组本地作用域属性。 这些本地属性对模板的别名值很有用。 本地定义是本地范围属性到源的散列:
=
或=attr
– 在本地作用域属性与通过attr
属性值定义的父级作用域属性之间build立双向绑定。 如果没有指定attr
名称,则假定属性名称与本地名称相同。 给定<widget my-attr="parentModel">
和scope: { localModel:'=myAttr' }
小部件定义,那么小部件范围属性localModel
将反映父范围上的parentModel
的值。 对parentModel
任何更改localModel
将反映在parentModel
,localModel
任何更改localModel
将反映在parentModel
。 如果父级范围属性不存在,则会引发NON_ASSIGNABLE_MODEL_EXPRESSIONexception。 你可以使用=?
来避免这种行为 或=?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]); } }