按对象中的数组中的值进行过滤

时间:2015-06-17 07:51:02

标签: javascript angularjs ionic-framework ionic

假设我有一个对象数组,例如:

$scope.data = [{name: 'foo name', value: 'foo value', spots: ['s1', 's2', 's3']},
               {name: 'foo name 2', value: 'foo value 2', spots: ['s1', 's2', 's3', 's4'}];

我想根据用户选择的当前“点”的值过滤此数据。我知道我可以这样写:

<div ng-repeat="subItem in data | filter: 's' + currentSpot">
      // Some content
</div>

但在实际情况中,每个项目中的数据要复杂得多,因此在更新DOM时会导致延迟。我想通过'spot'字段过滤 only 。我一直在搜索,但没有找到任何可以解决这个问题的好方案。

2 个答案:

答案 0 :(得分:1)

从Angular 1.1.3或更新版本开始,你可以做类似的事情

<input type="text" ng-model="search">
<div ng-repeat="item in data | filter: {'spots': search}">
   //something
</div>

其中&#39;斑点&#39;是要搜索的数据项中的键。

看到这个小提琴:http://jsfiddle.net/0Lftnfqc/

答案 1 :(得分:0)

你可以这样做:

filter: function (value) {
                var deferred = $q.defer();
                var matches = $scope.data.filter(function (datarow) {
                    if (value== "" || value== null) return false;
                    else if (datarow.spots.toLowerCase().indexOf(value.toLowerCase()) != -1) return true;
                });
                $timeout(function () {
                    deferred.resolve(matches);
                }, 100);
                return deferred.promise;
            }

真快速复制粘贴,因此您必须根据自己的情况进行调整。我建议使用2个数组,完整的数组和过滤的数组,然后在ng-repeat中引用。