¿El signo de interrogación después de igual tiene un significado especial? es decir:
scope: {foo: '=?'}
Qué significa lo anterior 'no generar error si' foo 'no se puede resolver?
fuente
¿El signo de interrogación después de igual tiene un significado especial? es decir:
scope: {foo: '=?'}
Qué significa lo anterior 'no generar error si' foo 'no se puede resolver?
El ámbito 'aislar' toma un hash de objeto que define un conjunto de propiedades de ámbito local derivadas del ámbito primario. Estas propiedades locales son útiles para crear alias de valores para plantillas. La definición de locales es un hash de propiedad de ámbito local para su fuente:
=
o=attr
- configurar un enlace bidireccional entre una propiedad de ámbito local y la propiedad de ámbito principal del nombre definido a través del valor delattr
atributo. Si noattr
se especifica ningún nombre, se supone que el nombre del atributo es el mismo que el nombre local. Dada<widget my-attr="parentModel">
y la definición del widget descope: { localModel:'=myAttr' }
, entonces la propiedad del alcance del widgetlocalModel
reflejará el valor deparentModel
en el alcance padre. Cualquier cambio enparentModel
se reflejará enlocalModel
y cualquier cambio enlocalModel
se reflejará enparentModel
. Si la propiedad del ámbito principal no existe, arrojará una excepción NON_ASSIGNABLE_MODEL_EXPRESSION. Puede evitar este comportamiento usando=?
o=?attr
para marcar la propiedad como opcional.
Debe desencadenar el error esperado en cada resumen que afecta 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]);
}
}