ng-class - 在对象中查找值

时间:2015-09-15 10:39:29

标签: angularjs javascript-objects ng-class

我有一个看起来像这样的对象:

$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';
    }

};  

......但没有快乐。

任何人都能指出/推动我朝着正确的方向前进吗?

1 个答案:

答案 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' : '';
}