2014-12-05 16 views
8

Mam tablicę obiektów początkowo przy załadunku, nie powinien być stosowany żaden filtr , wtedy lista kombinacji wyboru użytkownika powinna być odpowiednio wyświetlana.Jak filtrować listę używając angularjs

Fiddle

nie jestem w stanie uzyskać co źle zrobiłem zrobić tu całą listę i nie wyświetlanie i tylko pojedynczy wybór pracuje naraz. Do pojedynczego zaznaczenia użyłem:

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

Nie mogę połączyć obu prac selekcyjnych.

+0

http://jsfiddle.net/vzndtnkp/2/ pracy –

+0

Jedno jest pewne: w twoim kodzie masz zasięg $.filterByCategory = funkcja (stat), która przyjmuje parametr o nazwie stat. Wywołujesz tę funkcję w filtrze bez podawania jakichkolwiek parametrów. To przynajmniej zepsuje twój filtr. –

+0

stat jest przedmiotem listy –

Odpowiedz

1

Filtry mogą być chained together, tak:

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

Filtry biegnie od lewej do prawej, z każdego filtra przechodzącej przefiltrowaną tablicę do następnego filtra.

Oto rozwidlenie Mark's skrzypce, wykazując tę ​​technikę: http://jsfiddle.net/2671uggu/

0

Proszę korzystać z tego samego nazewnictwa i sprawę wszędzie w kodzie

  • admin nie jest taka sama jak administrator
  • admin nie jest taka sama jak Admin

Jeśli dobrze rozumiem Podstawowy pomysł jest następujący:

$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; 
    }; 

Pełna demo: http://jsfiddle.net/6rqL6zxh/

+0

Dałoby to wynik nie z połączenia filtra –

+1

@KunalVashist zmienić ostatni wiersz na &&, jeśli chcesz zastosować oba warunki. W przeciwnym razie nie mam pojęcia, co chcesz :) –

-1

udało mi się dostać kod działa. Jest to pewnego rodzaju naprawa, a lepszym podejściem byłoby stworzenie filtru (również nad nim pracującego). Założenia że zrobiłem: -

filtrem stanu państwa oznacza sprawdzenie

Przez filtr ADMIN Stan 'userStatus' oznacza sprawdzenie 'role'

Sprawdź tę Plnkr

I filtruję na podstawie obiektu, który aktualizuje na podstawie $ scope.filter.

Zmiany HTML

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

Zmiany 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: filtr Marka wydaje się być poprawnie

Powiązane problemy