2016-09-30 2 views
1

Ich habe ein tief verschachteltes Objekt. Ich habe einige Datensätze, die 2 Felder enthalten, die Schlüssel der Objekteigenschaften zeigen. Ich habe auch Auswahl benötigt, um Datensätze nach Objekteigenschaft suchen und Eingabe nach Objektschlüssel suchen. Wenn ich also Option1 wähle und etwas Text eingib, werden die Übereinstimmungen im ersten Feld angezeigt (nicht zweit!). Und es ist ähnlich für das zweite Feld.

Wie ich versuche zu verwirklichen:
ich einen Filter http://plnkr.co/edit/z9DEmfYz2grW9UonLcFK?p=previewAngular ng-Repeat Filtering

.filter('appFilter', function() { 
    return function(value, select, input) { 

     var result = []; 
     input = input.toLowerCase(); 
     var reg = new RegExp(input,'g');  

     if (angular.isArray(value)) { 
     if (input === '' || $scope.isFiltering) { 
      return value; 
     } else if (select.value === 'Sequence') { 
      for (let i = 0; i < value.length; i++) { 
      if (value[i].Sequence.toLowerCase().match(reg)) { 
       result.push(value[i]); 
      } 
      } 
      return result; 
     } else if (select.value === 'ID') { 
      for (let i = 0; i < value.length; i++) { 
      if (angular.isArray(value[i].Document)) { 
       for (let j = 0; j < value[i].Document.length; j++) { 
       if (value[i].Document[j].ID.toLowerCase().match(reg)) { 
        result.push(value[i]); 
       } 
       } 

      } 
      } 
      return result;    
     } else { 
      console.log('error'); 
     } 
     } 
    } 
    }) 
schrieb

In Controller Ich habe ng-Modell erste Option ist zu wählen: $scope.selectParameter = $scope.parameter[0];
Im Debug ich einige Wert Eingabeparameter eingestellt (Zum Beispiel 123).

So suche ich nach ersten Feld, das 123 Wert enthält. Und das Ergebnis findet und schiebt das Objekt. Aber im Browser zeigt sich nichts.

Was ist das Problem? Und ich kann die leere Option nicht mit '?' Umgehen Wert in meinem wählen :(


AKTUALISIERT Fast meines Problem lösen:.. http://plnkr.co/edit/z9DEmfYz2grW9UonLcFK?p=preview
Es filtert durch entsprechendes Feld und Eingabewert Aber ich mit anderen Problemen konfrontiert
Wenn die Eingabe leer ist es nicht zeigen jeder Datensatz und zweite ist, wenn ich zweite Option (ID) Filter dupliziere einige Datensätze wählen.
Auch versuche ich Filter deaktivieren, ohne den Eingabetext zu löschen, indem Sie auf das Kontrollkästchen klicken.
Es ist, was ich tun will, aber es doesn ' t Arbeit:

else if (input === '' || $scope.isFiltering) { 
    return value; 
} 

$scope.isFiltering ist ng-model für Ankreuzfeld Eingang

+1

I posted Plunker zu http://plnkr.co/edit/z9DEmfYz2grW9UonLcFK?p=preview. Also hier ist ein ganzes Projekt. Wie kann ich den Filter ändern? – kipris

+1

Empty Option Problem: '' – ippi

+0

Danke. Es half. Außerdem muss der Controller '$ scope.selectParameter = $ scope.parameter [0];' und ng-options '' nach item.value'' hinzugefügt werden. – kipris

Antwort

2

ich versuchte, winkelförmigen Stangen Standardfilter. Ich bin mir nicht sicher, ob das genau das ist, was du willst, aber vielleicht hilft es auch ein wenig.

.filter('appFilter', function($filter) { 
    return function(value, select, input) { 
    if(!angular.isDefined(input) || input.length < 1) { 
     return value; 
    } 

    // Angulars "filter" lets you pass in a object-structure to search for nested fields. 
    var query = 
     (select.value === 'Sequence') ? 
      {Sequence:input} : {Document:{ID:input}}; 

    return $filter('filter')(value, query); 
    } 
}) 

http://plnkr.co/edit/Egkw9bUvTPgooc0u2w7C?p=preview

+0

Es ist eine coole Lösung :))) Danke! – kipris

+0

Und wenn ich die Filterung ein-/ausschalten möchte, indem ich auf die Checkbox klicke, wie kann ich das nach deinem Code realisieren? – kipris

+0

Muss Wert zurückgegeben werden, wenn der Filter eingeschaltet ist: 'if (! Angular.isDefined (Eingabe) || input.length <1 || $ scope.isFiltering) { Rückgabewert; } 'es funktioniert nicht – kipris