AngularJS自定义过滤功能

use*_*436 86 arrays controller filter angularjs

在我的控制器中,我想过滤一个对象数组.这些对象中的每一个都是一个可以包含字符串和列表的映射

我尝试使用$filter('filter')(array, function)格式,但我不知道如何访问我的函数内的数组的各个元素.这是一个显示我想要的内容的片段.

$filter('filter')(array, function() {
  return criteriaMatch(item, criteria);
});
Run Code Online (Sandbox Code Playgroud)

然后在criteriaMatch(),我会检查每个属性是否匹配

var criteriaMatch = function(item, criteria) {
  // go thro each individual property in the item and criteria
  // and check if they are equal
}
Run Code Online (Sandbox Code Playgroud)

我必须在控制器中完成所有这些操作并编译列表列表并在范围内设置它们.所以我确实只需要以$filter('filter')这种方式访问.到目前为止,我在网络中找到的所有示例都在函数内部进行静态条件搜索,它们不传递条件对象并对数组中的每个项目进行测试.

Tos*_*osh 168

您可以这样使用它:http: //plnkr.co/edit/vtNjEgmpItqxX5fdwtPi?p = preview

就像你找到的那样,filter接受从数组中逐项接受的谓词函数.因此,您只需要根据给定的内容创建谓词函数criteria.

在这个例子中,criteriaMatch是一个返回与给定匹配的谓词函数的函数criteria.

模板:

<div ng-repeat="item in items | filter:criteriaMatch(criteria)">
  {{ item }}
</div>
Run Code Online (Sandbox Code Playgroud)

范围:

$scope.criteriaMatch = function( criteria ) {
  return function( item ) {
    return item.name === criteria.name;
  };
};
Run Code Online (Sandbox Code Playgroud)

  • 如果您没有在模板中使用它,那么定义过滤器不会给您带来任何好处.你可以简单地定义一个简单的javascript函数,因为它更短.你可以在Array对象中使用原生`filter`方法:`array.filter(function(item){return item.name === criteria.name;})` (6认同)