包含搜索条件的数组的角度过滤器

时间:2015-07-27 20:51:06

标签: angularjs angular-filters

内置的Angular"过滤器"支持过滤数组,意思是"过滤数组包含"

如下:

$scope.currentFilter = "Allentown";

$scope.users = [{
   name: "user1", 
   locations: [
      { name: "New York", ... },
      { name: "Allentown", ... },
      { name: "Anderson", ... },
   ]

}, ... ];

<div ng-repeat="user in users | filter : { locations: { name: currentFilter } }"></div>

换句话说,我希望仅过滤到具有&#34;位置的用户&#34;包含按名称匹配字符串的位置的数组。

如果没有,我如何使用自定义过滤器完成此操作?

1 个答案:

答案 0 :(得分:1)

您的代码段自Angular 1.2.13以来一直有效。如果您使用的是旧版本(在1.0.1上测试过)并且不需要跨控制器重复使用过滤例程(在这种情况下您应该声明一个正确的过滤器),您可以传递内置的{{3一个谓词函数:

<div ng-repeat="user in users | filter : hasLocation">{{user.name}}</div>

写下这样的话:

$scope.currentFilter = "Allentown";

$scope.hasLocation = function(value, index, array) {
    return value.locations.some(function(location) {
       return location.name == $scope.currentFilter;
    });
}

小提琴filter