Угловое выражение, если массив содержит
Я пытаюсь добавить класс к элементу, если jobSet
не был выбран для утверждения с помощью выражений.
<li class="approvalUnit" ng-repeat="jobSet in dashboard.currentWork" ng-class="{-1:'approved'}[selectedForApproval.indexOf(jobSet)]">
это не совсем дурака метод. Любые предложения о том, как я должен это сделать?
3 ответа:
вы можете сделать это с немного другой синтаксис:
ng-class="{'approved': selectedForApproval.indexOf(jobSet) === -1}"
вы не должны перегружать шаблоны сложной логикой, это плохая практика. Помните, чтобы всегда держать его просто!
лучшим подходом было бы извлечь эту логику в многоразовую функцию на вашем
$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>