目前我有一个json结果显示在ng-repeat中,我希望根据单独的对象或数据数组进行过滤:
Controller.js
$scope.jsonResult = [
{
"id": "a123"
},
{
"id": "b456"
}
]
HTML
<span ng-repeat="r in jsonResult">{{r.id}}</span>
我想要实现的是创建一个单独的信息数组,然后使用此数据过滤我的HTML中显示的ng-repeat
结果。
$scope.itemsToFilter = ["b456","foo"]
由于我的itemsToFilter
数组中的某个项与我jsonResult
范围内的对象匹配,我希望不要在HTML中的ng-repeat
内显示。这是我应该为自定义过滤器编写的吗?对不起,我对Angular很新。
答案 0 :(得分:1)
最简单的方法是使用自定义过滤器。快速过滤器可以这样写:
$scope.filterByStrings = function (item) {
return ($scope.itemsToFilter.indexOf(item.id) === -1);
};
并且这样称呼:
<div ng-repeat="item in data | filter:filterByStrings ">
<p>{{item.id}}</p>
</div>
Here是小提琴。
答案 1 :(得分:1)
您可以创建一个Angular过滤器,该过滤器返回按项目&#39;过滤的数组。与您的黑名单匹配的ID:
angular.module("yourAppName")
.filter("filterArrayByBlacklist", function() {
blackList = ["b456","foo"];
return function(array) {
return array.filter(function(item) {
return blackList.indexOf(item.id) === -1; // item id not found in blacklist
});
};
});
然后,您可以通过过滤功能过滤ng-repeat:
<span ng-repeat="r in jsonResult | filterArrayByBlacklist">{{r.id}}</span>
请参阅此plnkr了解演示:http://plnkr.co/edit/VK3jiVBpL0e1G06WmPZq