ng-class - 在对象中找到一个值

ng-class - finding a value inside object

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

$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()" 基本上是将值组合起来并将它们添加到对象中。

单击时,它应该添加 class selected - 当我不使用多维对象时,它工作得很好,很漂亮,因为它只是在里面寻找 name对象/数组(此时,我认为它是一个对象......但当时,它是一个数组)

我不知道如何做与此等效的事情...

$scope.thingClass= function(name) {
    if($scope.thingSelected.indexOf(name) != -1) {
        return 'selected';
    }
};

...与现在的对象一样。我试图从这里改编一些我通过 google 找到的答案,例如:

$scope.teamClass = function(name) {

    var found = $filter('filter')($scope.thingSelected, {id: name}, true);

    if (found.length) {
        return 'selected';
    }

};  

...但没有快乐。

任何人都可以指出/推动我正确的方向吗?

您可以简单地将事物对象传递给 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' : '';
}