2017-08-18 156 views
1

我很努力地找到一種基於數組數組來篩選ng-repeat中的一組結果的方法。這些數字可以代表我想看到或看不到的結果。我能夠在視圖中使用過濾器,並通過一個數字進行過濾,這是可行的,但我希望將數組放在那裏並按數組進行過濾。我不在乎過濾器是否位於視圖,控制器或單獨的過濾器中。如何從數組數組中過濾ngRepeat中的項目?

下面的代碼成功地過濾與60

<div ng-repeat="topic in topics | filter:{forum_id:60}"> 
    Forum ID: {{topic.forum_id}} Forum Name: {{topic.forum_title}} 
    </div> 

我想通過一個數組

<div ng-repeat="topic in topics | filter:{forum_id:ARRAY_HERE}"> 
    Forum ID: {{topic.forum_id}} Forum Name: {{topic.forum_title}} 
    </div> 

完全普拉克這裏來過濾論壇ID主題: https://plnkr.co/edit/dCZ7DV?p=preview

+1

請在問題本身的[mcve]中包含所有相關代碼。不要只是發佈鏈接到顯示問題的代碼,因爲許多人在防火牆後面,不允許導航到代碼共享網站。您可以使用Stack Snippets複製很多網絡功能。 –

回答

1

傳遞你自己功能來過濾:

<div ng-repeat="topic in topics | filter:myFilterMethod(topic)"> 
    Forum ID: {{topic.forum_id}} Forum Name: {{topic.forum_title}} 
</div> 

和控制器:

$scope.myFilterMethod = function() { 
    return function(e) { 
     return $scope.filterBy.includes(e.forum_id); 
    } 
} 

updated plunkr

1

您也可以使用ng-ifindexOf功能這一點。

<div ng-repeat="topic in topics" ng-if="filterBy.indexOf(topic.forum_id) !== -1"> 
    Forum ID: {{topic.forum_id}} Forum Name: {{topic.forum_title}} 
</div> 

Demo

+0

哈迪和寶寶的例子都很好。從性能的角度來看哪一個最好? – mediaguru

+1

我覺得@baao答案是最好的。 –

1

本身,在角過濾器屬性不工作的方式,所以你需要自己定義一個手工篩選。

你可以像下面這樣做answer

angular.module('myApp').filter('selectedArray', function() { 
    return function(array, tags) { 
     return array.filter(function(object) { 

      for (var i in object.XXX) { 
       if (array.indexOf(object.XXX[i]) != -1) { 
        return true; 
       } 
      } 
      return false; 

     }); 
    }; 
}); 

,然後你可以使用它像:

<ul> 
    <li ng-repeat="task in tasks | selectedArray:Array"></li> 
</ul> 

在這個例子中的響應是對象的數組,你需要調整它到你的陣列,

希望它有幫助。