2012-09-28 11 views
19

Decir que tengo lo siguiente como parte de mi definición directive:¿Hay alguna forma de proporcionar un valor predeterminado para un alias de ámbito aislado?

scope: { 
    prop1: '@' 
} 

¿Hay alguna forma de prop1 para obtener un valor por defecto si la directiva no tiene un atributo prop1? Claro, puedo verificar si me defino y configurarlo, pero the property isn't always set when you would expect. Me pregunto si hay alguna sintaxis que omití en la documentación, o si hay una buena forma estándar de hacerlo. Gracias.

Respuesta

19

Depende del valor predeterminado que desee asignar. Si desea por defecto a un nombre en el ámbito primario, establecer un valor por defecto del atributo en función de la directiva compile funcionará:

 
    compile: function(element, attrs) { 
    if (attrs.person == undefined) { 
     attrs.$set("person", "person"); 
    } 
    ... 

Si desea que la Directiva para establecer el valor predeterminado, se pone un poco Tricker como Angular no le permitirá asignar al alias en el ámbito de aislamiento (obtendrá una excepción de "Expresión de modelo no asignable" del observador que intenta propagar la asignación al alcance primario aislado). Sin embargo, puede evitar esto marcando el atributo como opcional (lo que significa que Angular no registrará al oyente cuando se omite la propiedad).

 
    scope: { 
    person: "=?" 
    }, 
    link: function(scope, element, attrs) { 
    if (scope.person == undefined) { 
     scope.person = "Bob"; 
    } 
    ... 
    } 
+1

Nunca he visto la notación '?' En la propiedad de alcance antes. ¿Hay algún lugar que esté documentado? ¿O un violín que muestra que funciona? – dnc253

+0

https://github.com/angular/angular.js/commit/ac899d0da59157fa1c6429510791b6c3103d9401 – epeleg

+1

Dos cosas: 1) use 'angular.isUndefined (...)' y 2) está documentado aquí: https: //docs.angularjs. org/api/ng/service/$ compile # directiva-definición-objeto – icfantv

-3
scope['prop1'] = scope['prop1'] || '@' 
+0

Veo que funciona en un sentido general de javascript, pero esta pregunta es para definir específicamente una directiva con AngularJS. No veo cómo podría usar este mismo concepto allí. – dnc253

+0

angular arrojará un error si intenta hacer esta sintaxis con el indicador opcional '?'. sigue la solución anterior por @niall. – icfantv

Cuestiones relacionadas