2017-03-07 72 views
1

在我的模板中,我使用ng-repeat="obj in list"如何對兩個參數和數組進行重排序?

哪裏list是對象:

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

而且在默認情況下我有$scope.filter = {}

當我處理點擊:我填這個$scope.filter

$scope.filter["categories"].push("animal"); 
$scope.filter["categories"].push("human"); 

如何使filterng-repeat將與數組$scope.filter["categories"]一起工作,並將找到的元素對應$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

相關問題