2013-07-11 27 views
0

我有一個複選框列表,我想用它來過濾列表。複選框列表是硬編碼,看起來像這樣:在帶有硬編碼複選框的angularjs中使用過濾器

<input type="checkbox" ng-model="characteristics.nontraditional" ng-true-value="non-tradtional" ng-false-value="">&#160; Non Traditional<br> 
<input type="checkbox" ng-model="characteristics.metal" ng-true-value="metal" ng-false-value="">&#160; Metal<br> 
<input type="checkbox" ng-model="characteristics.plancha" ng-true-value="plancha" ng-false-value="">&#160; Plancha<br> 
<input type="checkbox" ng-model="characteristics.rocket" ng-true-value="rocket" ng-false-value="">&#160; Rocket<br> 
<input type="checkbox" ng-model="characteristics.wick" ng-true-value="wick" ng-false-value="">&#160; Wick 

我有我的NG-重複這樣看:

<div ng-repeat="stove in stoves | filteredstoves:characteristics"> 

和我的自定義過濾器看起來像這樣:

stovecat.filter('filteredstoves', function() { 
    return function(stoves, characteristics) { 
    alert(characteristics) 
     } 
    } 
} 

當我加載頁面。警報包含「未定義」,因爲沒有選中複選框,所以這是預期的。當我選擇一個或多個複選框時,警報包含[對象對象],這很好,因爲對象現在被傳遞到自定義過濾器中。如何訪問傳入我的自定義過濾器的這些值,以便我可以相應地過濾列表?有什麼我失蹤?

謝謝大家!

+0

哪些值你想要訪問? –

+0

[Answer here](http://stackoverflow.com/a/15197233/2013981)。 – rGil

回答

2

Plunker與解決方案:http://plnkr.co/edit/7PhNEADHW099w9kaqS7M?p=preview

模板:

<input type="checkbox" ng-model="characteristics.nontraditional">&#160; Non Traditional</input><br> 
<input type="checkbox" ng-model="characteristics.metal">&#160; Metal</input><br> 
<input type="checkbox" ng-model="characteristics.plancha">&#160; Plancha</input><br> 
<input type="checkbox" ng-model="characteristics.rocket">&#160; Rocket</input><br> 
<input type="checkbox" ng-model="characteristics.wick">&#160; Wick</input><br/> 

<div ng-repeat="stove in stoves | filteredstoves:characteristics">{{stove.name}} - {{stove.characteristics}}</div> 

過濾器:

stovecat.filter('filteredstoves', function() { 
    return function(stoves, characteristics) { 
    var result = stoves.slice(); // copy array 
    angular.forEach(characteristics, function(value, key) { 
     if(value) { 
     for(var index = 0; index < result.length; index++) { 
      stove = result[index]; 
      if(stove.characteristics.indexOf(key) == -1) { 
      result.splice(index--,1); 
      } 
     } 
     } 
    }); 
    return result; 
    } 
}); 

只需經過過濾器的所有特性,並刪除的項目沒有他們

+0

非常棒!謝謝!!! – rkamun1

相關問題