0

リストをフィルタリングするために使用したいチェックボックスリストがあります。チェックボックス リストはハード コードで、次のようになります。

<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-repeat は次のようになっています。

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

そして私のカスタムフィルターは次のようになります:

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

ページをロードするとき。チェックボックスが選択されていないため、アラートには「未定義」が含まれています。1 つまたは複数のチェックボックスを選択すると、アラートに [Object object] が含まれます。これは、オブジェクトがカスタム フィルターに渡されるため問題ありません。カスタム フィルターに渡されたこれらの値にアクセスして、それに応じてリストをフィルター処理するにはどうすればよいですか? 足りないものはありますか?

ありがとう!

4

1 に答える 1

2

プランカーとソリューション: 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;
  }
});

フィルターのすべての特性を調べて、それらのないアイテムを削除するだけです

于 2013-07-11T12:27:33.620 に答える