2017-03-07 3 views
1

私のテンプレートにはng-repeat="obj in list"を使用しています。 listがオブジェクトである2つのパラメータと配列でng-repeatをソートする方法は?

:デフォルトでも

0: { 
    status : "active", 
    category : "animal" 
} 
... 

私が扱うとき、私は$scope.filter = {}

を持っているがクリック:

ng-repeatにその filterにする方法
$scope.filter["categories"].push("animal"); 
$scope.filter["categories"].push("human"); 

:私はこの$scope.filterを埋めます配列$scope.filter["categories"]で動作し、要素は、category$scope.filter["categories"]に対応していますか?

+0

最も簡単な方法は、おそらく独自のカスタムフィルタを作成することです。 – Lex

答えて

3

などのカスタムフィルタを作成します。

app.filter('myFilter', function() { 

     return function(arrList, arrKeywords) { 

      var arrFilterList = []; 

      angular.forEach(arrList,function(oneVal,key){ 

       if(arrKeywords.indexOf(oneVal)){ 
       arrFilterList.push(oneVal); 
       } 
      }) 

      return arrFilterList; 
     } 
    }); 
1

あなたはカスタムフィルタを持つことができ、この

angular.module("app",[]) 
.filter('sam',function(){ 
    return function(item, arr){ 
    return arr.find(function(obj){ 
     return obj === item; 
    }) 
    } 
}) 

angular.module("app",[]) 
 
.filter('sam',function(){ 
 
    return function(item, arr){ 
 
    return arr.find(function(obj){ 
 
     return obj === item; 
 
    }) 
 
    } 
 
}) 
 
.controller("ctrl",function($scope){ 
 
\t $scope.list = [{ 
 
    status : "active", 
 
    category : "animal" 
 
},{ 
 
    status : "active", 
 
    category : "human" 
 
},{ 
 
    status : "active", 
 
    category : "bird" 
 
}] 
 

 
$scope.filter = {"categories":[]} 
 

 
$scope.filter["categories"].push("animal"); 
 
$scope.filter["categories"].push("human"); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app" ng-controller="ctrl"> 
 
<div ng-repeat="obj in list "> 
 
{{obj.category | sam : filter.categories}} 
 
</div> 
 

 
</div>

+0

コレクションレベルでフィルターを使用していないのはなぜですか( 'ng-repeat'で適用できます)? – Lex

+0

フィルタはオブジェクトではなくリスト全体の配列を渡すので、関連する値をフィルタリングするために別の追加ループが必要です –

+0

Angularは 'ng-repeat'ループの前にフィルタリングします。ループ "はここで正しいです。ベストプラクティスはコレクションレベルでフィルタリングすることだと思います。 – Lex

関連する問題