我有一个看起来像这样的对象:
$scope.things = [
{
name: 'Bob!',
short_name: 'bob',
info: 'something something'
},
{
name: 'Steve',
short_name: 'steve',
info: 'something something something'
},
];
我像这样循环遍历它们并添加一个ng-click:
<div ng-repeat="thing in things" ng-click="addThing(thing.name, thing.short_name, thing_info" ng-class="thingClass(thing.name)">content goes here</div>
ng-click="addThing()"
基本上将值组合在一起并将它们添加到对象中。
单击时,它应该添加类selected
- 当我不使用多维对象时,这很好用,因为它只是在对象/数组中寻找name
(在这一点,我认为这是一个对象......但当时,它是一个数组)
我无法弄清楚如何做到与...相当......
$scope.thingClass= function(name) {
if($scope.thingSelected.indexOf(name) != -1) {
return 'selected';
}
};
......与现在的对象一样。我试图通过谷歌找到一些答案,例如:
$scope.teamClass = function(name) {
var found = $filter('filter')($scope.thingSelected, {id: name}, true);
if (found.length) {
return 'selected';
}
};
......但没有快乐。
任何人都能指出/推动我朝着正确的方向前进吗?
答案 0 :(得分:3)
您可以简单地将thing对象传递给thingClass
:
... ng-class="thingClass(thing)" ...
并按如下方式实施thingClass
:
$scope.thingClass= function(thing) {
return $scope.thingSelected.indexOf(thing) >= 0 ? 'selected' : '';
}
也许您应该将此技术应用于addThing
:
... ng-click="addThing(thing)" ...
$scope.addThing = function(thing) {
if ($scope.thingSelected.indexOf(thing) < 0)
$scope.thingSelected.push(thing);
}
但是,不是跟踪数组中的选定内容,而是更容易在每个内容中引入selected
属性:
$scope.addThing = function(thing) {
thing.selected = true;
}
$scope.thingClass= function(thing) {
return thing.selected ? 'selected' : '';
}