2012-09-28 12 views
19

Dire che ho il seguente come parte del mio directive definizione:Esiste un modo per fornire un valore predefinito per un alias di ambito isolato?

scope: { 
    prop1: '@' 
} 

C'è un modo per prop1 per ottenere un valore di default se la direttiva non ha un attributo prop1? Certo, posso verificare se è stato definito e impostato, ma the property isn't always set when you would expect. Mi stavo chiedendo se c'è qualche sintassi che ho perso nella documentazione, o se c'è un buon modo standard per farlo. Grazie.

risposta

19

Dipende dal valore predefinito che si desidera assegnare. Se si desidera per difetto a un nome nel campo di applicazione genitore, l'impostazione di un valore di attributo di default nella funzione della direttiva compile funzionerà:

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

Se si desidera che la direttiva per fornire il valore di default, che diventa un po 'Tricker come Angular non ti permetterà di assegnare l'alias nell'isolamento dell'isolamento (otterrai un'eccezione "Espressione di modello non assegnabile" dall'osservatore che sta tentando di propagare l'assegnazione all'ambito genitore isolato). Tuttavia è possibile evitare ciò contrassegnando l'attributo come facoltativo (il che significa che Angular non registrerà l'ascoltatore quando la proprietà è ommited).

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

Non ho mai visto la notazione '?' Nella proprietà scope prima. C'è qualche posto che è documentato? O un violino che mostra che funziona? – dnc253

+0

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

+1

Due cose: 1) usare 'angular.isUndefined (...)' e 2) è documentato qui: https: //docs.angularjs. org/api/ng/service/$ compile # direttiva-definizione-oggetto – icfantv

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

vedo che lavorare in un certo senso javascript generale, ma questa domanda è per quando espressamente la definizione di una direttiva con AngularJS. Non vedo come potrei usare lo stesso concetto lì. – dnc253

+0

angolare genererà un errore se si tenta di fare questa sintassi con il flag opzionale '?'. segui la soluzione sopra di @niall. – icfantv

Problemi correlati