2013-06-17 12 views
57

Próbuję dodać klasę do elementu, jeśli jobSet nie został wybrany do zatwierdzenia za pomocą wyrażeń.Wyrażenie kątowe, jeśli tablica zawiera

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

To nie jest dokładnie ta metoda. Jakieś sugestie, jak mam to zrobić?

Odpowiedz

111

Można tego dokonać z nieco innej składni:

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

Plnkr

+0

powinno być = prawy? http://jsfiddle.net/ARK5q/361/ – nilloc

15

Nie należy przeciążać szablonów ze złożonej logiki, to jest złą praktyką. Pamiętaj, aby zawsze być prostym!

Lepszym rozwiązaniem byłoby wyodrębnić tę logikę do funkcji wielokrotnego użytku na $rootScope:

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

Następnie użyj go w szablonie:

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

Chyba każdy zgodzi się, że ten przykład jest znacznie bardziej czytelny i łatwiejszy w utrzymaniu.

0

Gdzieś w inicjalizacji umieścić ten kod.

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

Następnie można użyć go w ten sposób:!

<li ng-class="{approved: selectedForApproval.contains(jobSet)}"></li> 
Powiązane problemy