2014-01-24 49 views
5

過濾重複的比賽我有得到由ngRepeat環繞在對象的列表:AngularJS:對列表

hashes = [ 
    { 
     "type": "foo" 
    , … 
    } 
    , { 
     "type": "foo" 
    , … 
    } 
    , { 
     "type": "bar" 
    , … 
    } 
] 

我想根據type對其進行過濾,如果它的價值在針的列表匹配的項目:

types = ['foo','quz']; 

所以像

<div ng-repeat="hash in hashes | filter:types"></div> 

這是內置到角或者我是否必須編寫自定義過濾器?

回答

16

要過濾針對單一類型的,你可以這樣做:

<div ng-repeat="hash in hashes | filter: {type:'foo'}"> 

要篩選對一個數組,你並不需要一個完全自定義的過濾器,但我會用一個謂詞過濾器,你可以在傳遞給角的過濾器。這裏的過濾器,假設你的數組type

$scope.filterArray = function(hash) { 
    return ($scope.types.indexOf(hash.type) !== -1); 
}; 

像這樣來使用:

<div ng-repeat="hash in hashes | filter: filterArray"> 

兩個

自定義篩選

做一個完全自定義的過濾器,這demo fiddle作品:

filter('inArray', function() { 
    return function inArray(haystack , needle) { 
     var result = []; 
     var item,i; 
     for (i=0; i< haystack.length;i++) { 
      item = haystack[i]; 
      if (needle.indexOf(item.type) !== -1) 
       result.push(item); 
     }; 
     return (result); 
    }; 
}); 

像這樣來使用:

<div ng-repeat="hash in hashes | inArray: types"> 

demo of custom filter

+0

涼,謝謝。可恥的角度本身並不支持它。 – jacob

+0

我最終使它成爲了一個名爲'inArray'(&agrave; la php's in_array)的適當過濾器。將它添加到我的問題的底部。 – jacob

+0

@jacob你確定過濾器對你來說工作正常嗎?通常,自定義過濾器需要返回所有傳遞值的數組(不同於謂詞過濾器,這是針對每個條目執行的) - 但它看起來像是返回一個布爾值。 – KayakDave