2013-12-07 164 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