2013-06-17 2 views
57

Я пытаюсь добавить класс к элементу, если jobSet не был выбран для утверждения с использованием выражений.Угловое выражение, если массив содержит

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

Это не совсем метод доказательства дурака. Любые предложения о том, как я должен это делать?

ответ

111

Вы можете сделать это с несколько иным синтаксисом:

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

Plnkr

+0

это должно быть = правильный? http://jsfiddle.net/ARK5q/361/ – nilloc

15

Вы не должны перегружать шаблоны со сложной логикой, это плохая практика. Помните, что всегда держите его просто!

подход лучше бы извлечь эту логику в многоразовую функцию на вашем $rootScope:

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

Затем, используйте его в шаблоне:

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

Я думаю, все согласятся, что этот пример более читабельна и удобна в обслуживании.

0

Где-то в вашей инициализации поместите этот код.

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

Затем, вы можете использовать его таким образом:

<li ng-class="{approved: selectedForApproval.contains(jobSet)}"></li> 
Смежные вопросы