簡體   English   中英

如何使用Angular中另一個數組中未包含的值過濾ng-repeat?

[英]How to filter ng-repeat with values NOT IN another array in Angular?

有什么方法可以使用角度過濾器將值與數組中的每個值進行比較?

Categories: <span ng-repeat="c in i.categories | filter: '!'+'myArray' ">{{c}}</span>

我想顯示i.categories中不在myArray

$scope.i = {
  categories: [
    "Europe & Eurasia",
    "Featured",
    "Headlines",
    "Middle East",
    "News",
    "NEWS BY TOPIC",
    "News Categories",
    "REGIONAL NEWS"
  ]
};

$scope.myArray = ['Featured', 'Headlines', 'News'];

我想從c中獲取myArray 包含的所有內容。

我已經嘗試編寫一些函數,但是由於有很多請求,我的應用程序真的很慢。

因此,我可以以某種方式傳遞我的數組,然后讓Angular遍歷該數組中的每個項目並將其與當前值進行比較嗎?

您可以嘗試使用自定義過濾器,如下所示:

angular.module('myApp', []).filter('notInArray', function($filter) {
    return function(list, arrayFilter) {
        if(arrayFilter) {
            return $filter("filter")(list, function(listItem) {
                return arrayFilter.indexOf(listItem) == -1;
            });
        }
    };
});

像這樣使用它:

<div ng-repeat='c in i.categories | notInArray:myArray'>{{c}}</div>

JSFiddle演示


 angular.module('Test', []).filter('notInArray', function($filter) { return function(list, arrayFilter) { if(arrayFilter) { return $filter("filter")(list, function(listItem) { return arrayFilter.indexOf(listItem) == -1; }); } }; }); function Ctrl($scope) { $scope.i = {categories: [ "Europe & Eurasia", "Featured", "Headlines", "Middle East", "News", "NEWS BY TOPIC", "News Categories", "REGIONAL NEWS" ]}; $scope.myArray = ['Featured', 'Headlines', 'News']; } 
 <!DOCTYPE html> <html ng-app='Test'> <head> <script src="http://code.angularjs.org/1.1.1/angular.min.js"></script> <meta charset=utf-8 /> </head> <body ng-controller='Ctrl'> <div ng-repeat='c in i.categories | notInArray:myArray'>{{c}}</div> </body> </html> 

您也可以這樣使用。

angular.module('App.filters', []).filter('companyFilter', [function () {
    return function (arr, selArr) {
      var retArr = [];
        angular.forEach(arr, function(v, k){
      var found =0;
            for(var i=0; i<selArr.length; i++){
            if(selArr[i] == v.name){
                    found = 1;
                break;
            }
          }
          if(found == 0){
            retArr.push(v);
          }
      })
      return retArr;
    };
}]);

<div ng-controller="MyCtrl">
  <div ng-repeat="c in categories|filter:customFilter">
{{c}}
  </div>
</div>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM