Угловое выражение, если массив содержит


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

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

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

3 57

3 ответа:

вы можете сделать это с немного другой синтаксис:

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

Plnkr

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

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

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

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

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

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

где-то в инициализации поставить этот код.

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>