Antworten:
Der Bereich 'isolieren' verwendet einen Objekt-Hash, der eine Reihe lokaler Bereichseigenschaften definiert, die vom übergeordneten Bereich abgeleitet sind. Diese lokalen Eigenschaften sind nützlich für Aliasing-Werte für Vorlagen. Die lokale Definition ist ein Hash der Eigenschaft des lokalen Bereichs für die Quelle:
=oder=attr- eine bidirektionale Bindung zwischen einer lokalen Bereichseigenschaft und der übergeordneten Bereichseigenschaft des Namens einrichten, die über den Wert desattrAttributs definiert wird. Wenn keinattrName angegeben wird, wird angenommen, dass der Attributname mit dem lokalen Namen übereinstimmt. Gegeben<widget my-attr="parentModel">und Widget-Definition vonscope: { localModel:'=myAttr' }, dannlocalModelspiegelt die Widget-Bereichseigenschaft den Wert vonparentModelauf dem übergeordneten Bereich wider . Alle Änderungen anparentModelwerden inlocalModelund alle Änderungen inlocalModelwerden reflektiertparentModel. Wenn die übergeordnete Bereichseigenschaft nicht vorhanden ist, wird eine NON_ASSIGNABLE_MODEL_EXPRESSION-Ausnahme ausgelöst. Sie können dieses Verhalten vermeiden, indem Sie=?oder verwenden,=?attrum die Eigenschaft als optional zu kennzeichnen.
Es sollte den erwarteten Fehler bei jedem Digest auslösen, der sich auf die Eigenschaft scope auswirkt:
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]);
}
}