假设我有一个对象数组,例如:
$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 。我一直在搜索,但没有找到任何可以解决这个问题的好方案。
答案 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中引用。