角度过滤器检查'包含'而不是'等于'

时间:2014-06-20 18:07:04

标签: javascript angularjs

我尝试使用'过滤器'来匹配规则。在Angular中过滤,如下所示: http://plnkr.co/edit/dQiv5lRzhQNjXZ6pVdWO?p=preview

我使用过滤器如下所示:

<div ng-repeat="f in fields">
      <h4>{{f.id}}</h4>
      <li ng-repeat = "rule in rules | filter:{field: {id: f.id} }">
        {{rule.name}}
      </li>
    </div>

这适用于单个数字ID,但有两位数,如下所示:

$scope.fields = [{id: 1}, {id: 2}, {id: 3}];
$scope.rules = [{name: "A", field: {id: 12, age: 3}}, {name: "B", field: {id: 2, age: 1}}];

id为12的规则与id为1和2的字段匹配,当它只应匹配id为12的字段时。有没有办法使用默认过滤器执行此操作,或者我应该创建自定义过滤

3 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,我发现这篇文章解决了这个问题 Angular JS filter equals

在你的情况下你应该写:

<div ng-repeat="f in fields">
      <h4>{{f.id}}</h4>
      <li ng-repeat = "rule in rules | filter:{field: {id: f.id} }:true">
        {{rule.name}}
      </li>
    </div>

答案 1 :(得分:1)

您可以创建自己的过滤器:

.filter('byId',function(){
  return function(items, id){
    var res = [];
    for(var i=0;i<items.length;i++){
      if(items[i].field.id===id){
        res.push(items[i]);
      }  
    }
    return res;
  };
});

HTML:

<li ng-repeat = "rule in rules | byId:f.id">
  {{rule.name}}
</li>

http://plnkr.co/edit/d3jmMWOwsHlMEya2Kjei?p=preview

答案 2 :(得分:0)

Angular支持Equals匹配原生。代替比较器功能,只需传递“true”。默认情况下为false。

在HTML模板绑定中

{{ filter_expression | filter : expression : true }}

在JavaScript中

$filter('filter')(array, expression, true)

参考:Angular Js Documentation