2013-12-07 126 views

回答

142

Yes:

在“分离物”范围需要对象的散列,其定义了一组从父范围导出本地范围的属性。这些本地属性对模板的别名值很有用。当地人定义是本地范围属性其源的散列:

==attr - 设置一个本地范围 属性并经由attr属性的值 定义名称的父范围属性之间的双向绑定。如果没有指定attr名称,则假定 属性名称与本地名称相同。如果给定 <widget my-attr="parentModel">和小部件定义scope: { localModel:'=myAttr' },那么小部件范围属性localModel将 反映在父范围上的值parentModelparentModel的任何更改将反映在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]); 
    } 
} 
+1

有道理,但为什么不[这个指令(http://plnkr.co/edit/ FxyDVi5JeWyC6B8TX1fk?p =预览)抛出异常。父级范围属性不存在,范围分配不使用'=?' – Nikita

+7

它似乎只是在设置值时抛出错误,如下所示:http://plnkr.co/edit/OSpaC6sPE0hY9yAeFghr?p=preview –

+0

这是在官方angularjs文档中记录的任何地方吗? – cebor