2014-06-20 63 views
4

我想如下所示匹配規則,利用角的「過濾器」過濾字段: 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的字段。有沒有辦法做到這一點與默認的過濾器,或者我應該創建一個自定義過濾器?

回答

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

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> 
0

角支持等於本地匹配。代替比較功能,只需通過「真」即可。默認情況下它是假的。

在HTML模板綁定

{{ filter_expression | filter : expression : true }} 

在JavaScript

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

參見:Angular Js Documentation

相關問題