O ponto de interrogação depois de igual tem um significado especial? ou seja:
scope: {foo: '=?'}
o acima significa 'não gerar erro se' foo 'não puder ser resolvido?
fonte
O ponto de interrogação depois de igual tem um significado especial? ou seja:
scope: {foo: '=?'}
o acima significa 'não gerar erro se' foo 'não puder ser resolvido?
O escopo 'isolar' usa um hash de objeto que define um conjunto de propriedades de escopo local derivadas do escopo pai. Essas propriedades locais são úteis para criar alias de valores para modelos. A definição de locais é um hash da propriedade de escopo local para sua origem:
=
ou=attr
- configurar a ligação bidirecional entre uma propriedade de escopo local e a propriedade de escopo pai de nome definida por meio do valor doattr
atributo. Se nenhumattr
nome for especificado, será assumido que o nome do atributo seja o mesmo que o nome local. Dada<widget my-attr="parentModel">
e a definição doscope: { localModel:'=myAttr' }
widget, a propriedade do escopo do widgetlocalModel
refletirá o valorparentModel
no escopo pai. Quaisquer alteraçõesparentModel
serão refletidaslocalModel
e quaisquer alteraçõeslocalModel
serão refletidasparentModel
. Se a propriedade do escopo pai não existir, lançará uma exceção NON_ASSIGNABLE_MODEL_EXPRESSION. Você pode evitar esse comportamento usando=?
ou=?attr
para sinalizar a propriedade como opcional.
Ele deve disparar o erro esperado em cada resumo que afeta a propriedade do escopo:
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]);
}
}