Réponses:
La portée 'isolate' prend un hachage d'objet qui définit un ensemble de propriétés de portée locale dérivées de la portée parent. Ces propriétés locales sont utiles pour créer des alias pour les valeurs des modèles. La définition locale est un hachage de la propriété de portée locale vers sa source:
=
ou=attr
- configurer une liaison bidirectionnelle entre une propriété de portée locale et la propriété de portée parente de nom définie via la valeur de l'attr
attribut. Si aucunattr
nom n'est spécifié, le nom d'attribut est supposé être le même que le nom local. Étant donné<widget my-attr="parentModel">
et la définition du widget descope: { localModel:'=myAttr' }
, la propriété d'étendue du widgetlocalModel
reflètera la valeur deparentModel
sur l'étendue parent. Toute modification deparentModel
sera reflétée danslocalModel
et toute modification delocalModel
sera reflétée dansparentModel
. Si la propriété d'étendue parent n'existe pas, elle lèvera une exception NON_ASSIGNABLE_MODEL_EXPRESSION. Vous pouvez éviter ce comportement en utilisant=?
ou=?attr
pour marquer la propriété comme facultative.
Il doit déclencher l'erreur attendue sur chaque condensé qui affecte la propriété scope:
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]);
}
}