Risposte:
L'ambito 'isolare' accetta un hash oggetto che definisce un insieme di proprietà dell'ambito locale derivate dall'ambito padre. Queste proprietà locali sono utili per aliasare i valori per i modelli. La definizione di locali è un hash della proprietà dell'ambito locale alla sua origine:
=
oppure=attr
- impostare l'associazione bidirezionale tra una proprietà dell'ambito locale e la proprietà dell'ambito padre del nome definita tramite il valoreattr
dell'attributo. Se nonattr
viene specificato alcun nome, si presume che il nome dell'attributo sia uguale al nome locale. Dato<widget my-attr="parentModel">
e definito la definizione discope: { localModel:'=myAttr' }
, quindi la proprietà dell'ambito del widgetlocalModel
rifletterà il valoreparentModel
dell'ambito principale. Qualsiasi modifica aparentModel
verrà riflessalocalModel
e qualsiasi modifica alocalModel
verrà riflessaparentModel
. Se la proprietà dell'ambito padre non esiste, genererà un'eccezione NON_ASSIGNABLE_MODEL_EXPRESSION. È possibile evitare questo comportamento utilizzando=?
o=?attr
per contrassegnare la proprietà come facoltativa.
Dovrebbe attivare l'errore previsto su ogni digest che influisce sulla proprietà dell'ambito:
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]);
}
}