2013-06-17 17 views
57

Sto tentando di aggiungere una classe a un elemento se uno jobSet non è stato selezionato per l'approvazione tramite espressioni.Espressione angolare se la matrice contiene

<li class="approvalUnit" ng-repeat="jobSet in dashboard.currentWork" ng-class="{-1:'approved'}[selectedForApproval.indexOf(jobSet)]"> 

Questo non è esattamente un metodo infallibile. Qualche suggerimento su come dovrei fare questo?

risposta

111

È possibile raggiungere questo obiettivo con una sintassi leggermente diversa:

ng-class="{'approved': selectedForApproval.indexOf(jobSet) === -1}" 

Plnkr

+0

questo dovrebbe essere = destra? http://jsfiddle.net/ARK5q/361/ – nilloc

15

Si consiglia di non sovraccaricare i modelli con la logica complessa, è una cattiva pratica. Ricordati di tenerlo sempre semplice!

L'approccio migliore sarebbe quello di estrarre questa logica in funzione riutilizzabile sul $rootScope:

.run(function ($rootScope) { 
    $rootScope.inArray = function (item, array) { 
    return (-1 !== array.indexOf(item)); 
    }; 
}) 

Quindi, utilizzare nel vostro modello:

<li ng-class="{approved: inArray(jobSet, selectedForApproval)}"></li> 

Credo che tutti saranno d'accordo che questo esempio è molto più leggibile e mantenibile.

0

Da qualche parte nella tua inizializzazione inserisci questo codice.

Array.prototype.contains = function contains(obj) { 
    for (var i = 0; i < this.length; i++) { 
     if (this[i] === obj) { 
      return true; 
     } 
    } 
    return false; 
}; 

Quindi, è possibile utilizzare in questo modo:!

<li ng-class="{approved: selectedForApproval.contains(jobSet)}"></li> 
Problemi correlati