在 Controller 内部,我想过滤一组对象。每个对象都是一个映射,可以包含字符串和列表

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

$filter('filter')(array, function() {
  return criteriaMatch(item, criteria);
});

然后在criteriaMatch()中,我将检查每个单独的属性是否匹配
var criteriaMatch = function(item, criteria) {
  // go thro each individual property in the item and criteria
  // and check if they are equal
}

我必须在 Controller 中完成所有这些操作,并编译列表列表,然后在范围内进行设置。因此,我确实需要仅通过这种方式访问​​$filter('filter')。到目前为止,我在网上发现的所有示例都在函数内部进行了静态条件搜索,它们没有通过条件对象并针对数组中的每个项目进行测试。

最佳答案

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

就像您发现的那样,filter接受谓词函数,该谓词函数接受item
按数组中的项目。
因此,您只需要基于给定的criteria创建一个谓词函数。

在此示例中,criteriaMatch是一个返回谓词的函数
匹配给定criteria的函数。

模板:

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

范围:
$scope.criteriaMatch = function( criteria ) {
  return function( item ) {
    return item.name === criteria.name;
  };
};

关于arrays - AngularJS自定义过滤器功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16474091/

10-12 00:06
查看更多