Я пытаюсь создать класс списка, реагирующий на то, является ли этот идентификатор элемента списка в массиве. Я мог бы обработать это с помощью функции контроллера, но это не будет автоматически обновлять класс, если массив изменится.
Вот плункер, представляющий мою проблему, я хочу, чтобы все идентификаторы в $scope.redIds
были красными. http://plnkr.co/edit/rl8WWgTRnksDkEddmhj9
Код ниже:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example - example-ngController-production</title>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js"></script>
<script src="app.js"></script>
<style>
.red {
background-color: red;
}
</style>
</head>
<body ng-app="controllerExample">
<div ng-controller="controller">
<!-- 1 and 4 should be red -->
<div ng-repeat="id in ids">
<span ng-class="id in redIds ? 'red' : ''">ID: {{id}}</span>
</div>
</div>
</body>
</html>
app.js:
(function(angular) {
angular.module('controllerExample', [])
.controller('controller', ['$scope', controller]);
function controller($scope) {
$scope.ids = [1,2,3,4];
$scope.redIds = [1,4];
}
})(window.angular);
Спасибо!
EDIT Plunker обновлен рабочим решением: http://plnkr.co/edit/rl8WWgTRnksDkEddmhj9
В основном у вас есть неправильная директива ng-class
, она не должна использовать id in redIds
выражение не будет работать, этот вид кода работает только с ng-repeat
.
Для получения этой работы вы можете использовать .indexOf
здесь, который проверяет, redIds
массив redIds
содержит элемент id
или нет.
наценка
<div ng-repeat="id in ids">
<span ng-class="{'red': redIds.indexOf(id) != -1}">ID: {{id}}</span>
</div>
{}
для объектаng-class