我尝试使用'过滤器'来匹配规则。在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的字段时。有没有办法使用默认过滤器执行此操作,或者我应该创建自定义过滤
答案 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>
答案 2 :(得分:0)
Angular支持Equals匹配原生。代替比较器功能,只需传递“true”。默认情况下为false。
在HTML模板绑定中
{{ filter_expression | filter : expression : true }}
在JavaScript中
$filter('filter')(array, expression, true)