angularjs - personalizadas - ng-if
¿Cuál es el significado de ''=?'' en la declaración de alcance aislado de la directiva angularJS? (1)
¿El signo de interrogación después de igual tiene un significado especial? es decir:
scope: {foo: ''=?''}
¿significa lo anterior "no generar error si no se puede resolver" foo "?
El alcance "aislado" toma un hash de objeto que define un conjunto de propiedades de ámbito local derivadas del alcance principal. Estas propiedades locales son útiles para aliasar valores para plantillas. La definición de Locals es un hash de propiedad de ámbito local para su fuente:
=
or=attr
: configura el enlace bidireccional entre una propiedad de ámbito local y la propiedad de ámbito principal del nombre definido mediante el valor del atributoattr
. Si no se especifica ningún nombre de atributo, se supone que el nombre del atributo es el mismo que el nombre local. Dada<widget my-attr="parentModel">
y la definición descope: { localModel:''=myAttr'' }
del widgetscope: { localModel:''=myAttr'' }
, la propiedad de ámbito del widgetlocalModel
reflejará el valor deparentModel
en el ámbito principal. Cualquier cambio enparentModel
se reflejará enlocalModel
y cualquier cambio enlocalModel
se reflejará enparentModel
. Si la propiedad de ámbito principal no existe, lanzará una excepción NON_ASSIGNABLE_MODEL_EXPRESSION. Puede evitar este comportamiento usando=?
o=?attr
para marcar la propiedad como opcional.
Debería desencadenar el error esperado en cada resumen que afecte a la propiedad del alcance:
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]);
}
}