0

Ich habe ein Array von Objekt wie folgt:Filter und Ordnung in komplexem Objekt

$scope.clients = [ 
       { client: { name: 'ABC', age: '25' } }, 
       { client: { name: 'BCD', age: '26' } }, 
       { client: { name: 'CDE', age: '26' } } 
      ]; 

und ein Filterobjekt (tatsächlich dies ng-Modell gebunden ist im Ansicht) zu Filter und um das Array-Objekt:

$scope.filterParams = { 
       nameSearch: 'ABC', 
       order: 'age' 
      }; 

während ich versuche, die Filter durch client.name ist nicht aktualisiert alles in der Liste gefunden und die order by auch nicht arbeiten:

$scope.updateFilter = function() { 
       var filtered; 
       filtered = $filter('filter')($scope.clients, { 'client.name' : $scope.filterParams.nameSearch }); 
       filtered = $filter('orderBy')(filtered.client, $scope.filterParams.order); 

       $scope.filteredList = filtered; 
      } 

$scope.$watchCollection('filterParams', function() { 
       $scope.updateFilter(); 
      }); 

Kann mir jemand hier zeigt die richtige Richtung, um die Liste zu filtern und bestellen?

Antwort

0

Sie können eine Funktion als zweiten Parameter verwenden, wenn Sie $filter('orderBy')() aufrufen. Der Eingabeparameter der Funktion ist das Element des zu sortierenden Arrays. Die Funktion gibt den zu vergleichenden Wert mit '<', '>', '==' zurück.

function(item){ 
      return parseInt(item.client[$scope.filterParams.order]); 
} 

Auch Sie sortieren nicht das ursprüngliche Array $scope.clients, aber das gefilterte Ergebnis sortieren, die nur ein Datensatz ist. Ich frage mich, ob es ein Fehler ist.

Hier ist die fiddle.

+0

erste zuerst. der Filter funktioniert hier nicht. – Rezoan

+0

In meiner Geige wurde der Datensatz mit dem Namen 'ABC' wie gewünscht ausgefiltert, oder? – gm2008

Verwandte Themen