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 desattr
Attributs definiert wird. Wenn keinattr
Name angegeben wird, wird angenommen, dass der Attributname mit dem lokalen Namen übereinstimmt. Gegeben<widget my-attr="parentModel">
und Widget-Definition vonscope: { localModel:'=myAttr' }
, dannlocalModel
spiegelt die Widget-Bereichseigenschaft den Wert vonparentModel
auf dem übergeordneten Bereich wider . Alle Änderungen anparentModel
werden inlocalModel
und alle Änderungen inlocalModel
werden 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,=?attr
um 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]);
}
}