2016-05-12 2 views
1

Wenn ein benutzerdefiniertes Filter in AngularJS definieren, wie unten ich im Datensatz vorbei Ich mag gefiltert und einen Array als die Filterwerte dienen:AngularJS passiert ein Array zu benutzerdefinierten Filter als Parameter

Toggle-Tasten-Zustand in einer Reihe übergeben enter image description here

Parameterarray Wert in das Filter geleitet enter image description here

wie der Filter ist call:

Der benutzerdefinierte Filter prüft, welche Werte im Array angewendet werden sollen, indem der Datensatz in ng-repeat gefiltert wird.

.filter('filterStats', function() { 
     return function (items, paramArray) { 
     var isFilterEmpty = true; 
      angular.forEach(paramArray, function (value, key) { 
      if (value == 0) { 
       isFilterEmpty = false; 
      } 
     }); 

     if(!isFilterEmpty) 
     //More logic 
    } 
} 

Problem: Das Problem ist, dass der Array-Parameter nicht in der Lage sein scheint Schleife ist im Inneren des benutzerdefinierten Filter eine forEach verwenden. Das Parameterfeld zeigt [Array[0]] erscheint daher leer. Kann jemand bitte Anleitung in dieser Angelegenheit geben? Kann man ein Array als benutzerdefinierten Filterparameter übergeben? Was vermisse ich?

Tx. 

Antwort

2

Sieht aus wie Sie wahrscheinlich filters als Array definieren, aber es wie ein Objekt verwenden.

Sie haben keine Indizes in das Array eingefügt, daher ist es leer. Durch filters.Limited = '-1' tun dies ist das Hinzufügen benannte Eigenschaften auf das Array aber die tatsächliche Länge des Feldes ist immer noch 0.

var a = []; 
a.length; // 0 
a.something = '123'; 
a.length // still 0 
a[0] = '456'; 
a.length; // now 1 

Stattdessen, wenn Sie Ihre filters Variable als Objekt statt eines Array ich Ihren Code vorstellen definieren wird funktionieren, wie du es erwartest.

$scope.filters = {};

+0

Spot auf. Vielen Dank. –