2014-12-05 137 views
8

我有一個最初加載的對象數組沒有過濾器應該適用 然後在用戶選擇組合列表應相應地顯示。如何使用angularjs過濾列表

Fiddle

我不能讓我有沒有在這裏整個列表我並不顯示,只有單一選擇在工作時間做了什麼錯。 對於我使用的單一選擇

return $scope.filter[stat.userStatus] || noFilter($scope.filter); 

我不能使兩個選擇一起工作。

+0

http://jsfiddle.net/vzndtnkp/2/工作 – 2014-12-05 09:41:07

+0

有一點可以肯定的是,在你的代碼中你有$ scope。filterByCategory =使用stat命名參數的函數(stat)。您在過濾器中調用此函數而不給出任何參數。所以這至少會打破你的過濾器。 – 2014-12-05 10:32:02

+0

stat是列表的對象 – 2014-12-05 10:40:35

回答

1

過濾器可以是chained together,像這樣:

<div ng-repeat="item in mylist | filter:filterByStatus | filter:filterByRole"> 

濾波器從左至右運行,其中每個過濾器過濾的數組傳遞到下一個過濾器。

這裏是Mark's搗鼓的一個分支,證明了這種方法: http://jsfiddle.net/2671uggu/

0

請在任何地方使用相同的命名和案例在你的代碼

  • admin是不一樣的administrator
  • admin是不一樣的Admin

如果我理解正確,其基本思想如下,

$scope.filterByCategory = function (stat) { 
     //check if user has a status matching checkbox select 
     var by_status = $scope.filter[stat.userStatus]; 
     //check if user has a role that matching dropdown list select 
     var by_roles = stat.roles.indexOf($scope.filter.selectedSearch) !== -1; 

     return by_status || by_roles; //statisfy either of two will return true; 
    }; 

完整的示例:http://jsfiddle.net/6rqL6zxh/

+0

這會給我結果不是篩選器的組合 – 2014-12-09 07:33:36

+1

@KunalVashist將最後一行更改爲&&如果要應用這兩個條件。否則,我不知道你想要什麼:) – 2014-12-10 02:59:09

-1

我能得到你的代碼工作。這是一種解決方法,一種更好的方法是製作一個過濾器(也是如此)。 假設,我提出: -

通過會員狀態過濾裝置檢查 'userStatus'

通過ADMIN狀態過濾裝置檢查 '角色'

看看這個Plnkr

我我正在基於$ scope.filter更新的對象進行過濾。

更改HTML

<div ng-repeat="item in mylist | filter:filterModel"> 

更改JS

$scope.filterModel = 
     { 
      "userStatus":"", 
      "roles" : "" 
     } 
    $scope.$watch('filter', function() { 
     var myModel = 
     { 
      "userStatus":"", 
      "roles" : "" 
     } 
     if($scope.filter.administrator && $scope.filter.lead) 
     {  
      myModel.userStatus=""; 
     } 
     else if($scope.filter.administrator) 
     { 
      myModel.userStatus="admin";     
     } 
     else if($scope.filter.lead) 
     { 
      myModel.userStatus="lead"; 
     } 
     else 
     { 
      myModel.userStatus=""; 
     } 
     if(angular.equals($scope.filter.selectedSearch,'Default')) 
     { 
      myModel.roles=""; 
     } 
     else 
     { 
      myModel.roles=$scope.filter.selectedSearch; 
     } 
     $scope.filterModel=myModel; 
    },true); 

UPDATE:馬克的過濾器似乎是正確