对阵列过滤ng-repeat json结果

时间:2014-08-19 20:52:21

标签: javascript json angularjs angular-filters

目前我有一个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很新。

2 个答案:

答案 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