2013-12-07 4 views

Antwort

142

Yes:

Der ‚Isolat‘ Anwendungsbereich nimmt ein Objekt-Hash, das einen Satz von lokalen Bereichseigenschaften abgeleitet von dem übergeordneten Bereich definiert. Diese lokalen Eigenschaften sind nützlich für das Aliasing von Werten für Vorlagen. Lokale Definition ist ein Hash der lokalen Bereich Eigenschaft auf die Quelle:

= oder =attr - bidirektionale Bindung zwischen einer lokalen Bereich Eigenschaft und der übergeordneten Bereich Eigenschaft des Namen über den Wert des attr Attributs definiert aufgebaut. Wenn kein attr Name angegeben wird, wird angenommen, dass der Attributname mit dem lokalen Namen identisch ist. Gegeben <widget my-attr="parentModel"> und Widget-Definition von scope: { localModel:'=myAttr' }, dann Widget-Bereich Eigenschaft localModel wird den Wert von parentModel auf dem übergeordneten Bereich widerspiegeln. Alle Änderungen an parentModel werden in localModel widergespiegelt und alle Änderungen in localModel werden in parentModel widergespiegelt. Wenn die Eigenschaft des übergeordneten Bereichs nicht vorhanden ist, wird eine Ausnahme vom Typ NON_ASSIGNABLE_MODEL_EXPRESSION ausgelöst. Sie können dieses Verhalten mit =? oder =?attr vermeiden, um die Eigenschaft als optional zu kennzeichnen.

Es sollte die erwarteten Fehler auslösen auf jedem, dass verdauen beeinflusst den Umfang Eigenschaft:

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

Das macht Sinn, aber warum nicht [diese Richtlinie] (http://plnkr.co/edit/ FxyDVi5JeWyC6B8TX1fk? P = Vorschau) Exception auslösen. Parent-Bereichseigenschaft ist nicht vorhanden und die Bereichszuweisung verwendet kein '=?' – Nikita

+7

Es scheint nur den Fehler zu werfen, wenn der Wert gesetzt ist, wie hier: http://plnkr.co/edit/OSpaC6sPE0hY9yAeFghr?p=preview –

+0

ist das irgendwo in den offiziellen angularjs docs dokumentiert? – cebor