switch personalizadas directivas angularjs angularjs-directive

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 "?


Yes:

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 atributo attr . 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 de scope: { localModel:''=myAttr'' } del widget scope: { localModel:''=myAttr'' } , la propiedad de ámbito del widget localModel reflejará el valor de parentModel en el ámbito principal. Cualquier cambio en parentModel se reflejará en localModel y cualquier cambio en localModel se reflejará en parentModel . 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]); } }