¿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 delattratributo. Si noattrse 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 widgetlocalModelreflejará el valor deparentModelen el alcance padre. Cualquier cambio enparentModelse reflejará enlocalModely cualquier cambio enlocalModelse reflejará enparentModel. Si la propiedad del ámbito principal no existe, arrojará una excepción NON_ASSIGNABLE_MODEL_EXPRESSION. Puede evitar este comportamiento usando=?o=?attrpara 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]);
}
}