Le point d'interrogation après les égaux a-t-il une signification particulière? c'est à dire:
scope: {foo: '=?'}
ce qui précède signifie-t-il "ne pas générer d'erreur si" foo "ne peut pas être résolu?
La portée "isoler" utilise un hachage d'objet qui définit un ensemble de propriétés de portée locales dérivées de la portée parente. 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 à sa source:
=
ou=attr
_ - établit une liaison bidirectionnelle entre une propriété de portée locale et la propriété de portée parent du nom défini via la valeur de l'attributattr
. Si aucunattr
nom n'est spécifié, le nom de l'attribut est supposé être le même que le nom local. Donné<widget my-attr="parentModel">
et définition du widgetscope: { localModel:'=myAttr' }
, alors la propriété de portée du widgetlocalModel
reflétera la valeur deparentModel
sur la portée parente. Toute modification apportée àparentModel
sera reflétée danslocalModel
et toute modification apportée àlocalModel
sera reflétée dansparentModel
. Si la propriété de portée parent n'existe pas, une exception NON_ASSIGNABLE_MODEL_EXPRESSION sera renvoyée. Vous pouvez éviter ce comportement en utilisant=?
ou=?attr
afin de marquer la propriété comme facultative.
Cela devrait déclencher l'erreur attendue sur chaque résumé 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]);
}
}