Ich möchte den filter
Winkel verwenden und nach mehreren Werten filtern. Wenn einer der Werte vorhanden ist, sollte er angezeigt werden.
Ich habe zum Beispiel diese Struktur:
Ein Objekt movie
welches die Eigenschaft , genres
und ich möchte Filter für Action
und Comedy
.
Ich weiß, dass ich es kann filter:({genres: 'Action'} || {genres: 'Comedy'})
, aber was tun, wenn ich es dynamisch filtern möchte? Z.Bfilter: variableX
Wie stelle ich variableX
das ein $scope
, wenn ich eine Reihe von Genres habe, die ich filtern muss?
Ich könnte es als String konstruieren und dann einen machen, eval()
aber ich möchte eval () nicht verwenden ...
javascript
angularjs
angularjs-ng-repeat
JustGoscha
quelle
quelle
filter:({genres: 'Action'} || {genres: 'Comedy'})
überhaupt funktioniert? es geht nicht reinangular 1.3.16
.Antworten:
Ich würde nur einen benutzerdefinierten Filter erstellen. Sie sind nicht so schwer.
Vorlage:
Bearbeiten Sie hier den Link: Erstellen von Winkelfiltern
UPDATE : Hier ist eine Geige , die eine genaue Demo meines Vorschlags enthält.
quelle
Sie können eine Controller-Funktion zum Filtern verwenden.
HTML:
quelle
$scope.filteredMovies = $filter('filter')($scope.movies, $scope.filterByGenres);
Das Erstellen eines benutzerdefinierten Filters kann hier zu viel des Guten sein. Sie können einfach einen benutzerdefinierten Komparator übergeben, wenn Sie über mehrere Werte verfügen:
dann im Filter:
quelle
ng-model
in der Ansichtsdatei, um mit dem beschriebenen Filter zu verknüpfen? (sorry, das Lernen noch hier) - Ich mag die Einfachheit Ihrer Antwort und versucht , es zu bekommen arbeiten , aber nicht sicher , wie meine beschriften<input>
istng-model
. :)Hier ist die Implementierung eines benutzerdefinierten Filters, der die Daten mithilfe eines Array von Werten filtert. Er unterstützt mehrere Schlüsselobjekte mit einem Array und einem einzelnen Wert von Schlüsseln. Wie bereits erwähnt, unterstützt der AngularJS-Filter inangularJS den Mehrfachschlüsselfilter mit einem einzigen Wert. Der unten stehende benutzerdefinierte Filter unterstützt jedoch dieselbe Funktion wie angleJS und unterstützt auch ein Array von Werten und eine Kombination aus Array und Einzelwert von Schlüsseln.
Verwendung:
Hier ist ein Geigenbeispiel mit der Implementierung des oben genannten benutzerdefinierten Filters "filterMutiple" . ::: Geigenbeispiel :::
quelle
length property undefined
Fehler in der Konsole ausgelöst.if (fData.length > 0){ this.filteredData = fData; }
zu nur:this.filteredData = fData;
Wenn Sie nach einem Array von Objekten filtern möchten, können Sie angeben
filter:({genres: 'Action', key :value }.
Einzelne Eigenschaften werden nach bestimmten Filtern gefiltert, die für diese Eigenschaft angegeben wurden.
Wenn Sie jedoch nach einzelnen Eigenschaften filtern und global nach allen Eigenschaften filtern möchten, können Sie so etwas tun.
~ Atul
quelle
Ich habe einige Zeit damit verbracht und dank @chrismarx habe ich gesehen, dass
filterFilter
Sie mit der Standardeinstellung von Angular Ihren eigenen Komparator übergeben können. Hier ist der bearbeitete Komparator für mehrere Werte:Und wenn wir einen benutzerdefinierten Filter für DRY erstellen möchten:
Und dann können wir es überall verwenden, wo wir wollen:
Zum Schluss noch ein Plunkr .
Hinweis: Das erwartete Array sollte nur einfache Objekte wie String , Number usw. enthalten.
quelle
Sie können den searchField-Filter von angle.filter verwenden
JS:
HTML:
quelle
search
Haltestellen hier.Sie können auch verwenden,
ngIf
wenn die Situation dies zulässt:quelle
Die schnellste Lösung, die ich gefunden habe, ist die Verwendung des
filterBy
Filters aus dem Winkelfilter , zum Beispiel:Der Vorteil ist , dass Winkel-Filter ist eine ziemlich beliebte Bibliothek (~ 2.6k Sterne auf GitHub) , die immer noch aktiv entwickelt und gepflegt wird , so ist es in Ordnung es zu einem Projekt als Abhängigkeit hinzuzufügen sein sollte.
quelle
Ich glaube, das ist es, wonach Sie suchen:
quelle
Bitte versuchen Sie dies
quelle
Nehmen wir an, Sie haben zwei Arrays, eines für Filme und eines für Genres
Verwenden Sie den Filter einfach als:
filter:{genres: genres.type}
Hier haben Genres als Array und Typ einen Wert für das Genre
quelle
Ich habe dies für Zeichenfolgen UND Funktionalität geschrieben (ich weiß, dass es nicht die Frage ist, aber ich habe danach gesucht und bin hierher gekommen), vielleicht kann es erweitert werden.
Verwendung:
quelle
Winkel- oder Filtermodul
$filter('orFilter')([{..}, {..} ...], {arg1, arg2, ...}, false)
Hier ist der Link: https://github.com/webyonet/angular-or-filter
quelle
Ich hatte eine ähnliche Situation. Das Schreiben eines benutzerdefinierten Filters hat bei mir funktioniert. Hoffe das hilft!
JS:
HTML:
quelle
Hier ist mein Beispiel, wie Filter und Direktiven für die Tabelle jsfiddle erstellt werden
Direktive Get List (Daten) und erstellen Sie eine Tabelle mit Filtern
Es ist mir ein Vergnügen, wenn ich Ihnen helfe
quelle
Es ist zu spät, um an der Party teilzunehmen, aber vielleicht kann es jemandem helfen:
Wir können dies in zwei Schritten tun: zuerst nach der ersten Eigenschaft filtern und dann nach dem zweiten Filter verketten:
Sehen Sie sich die funktionierende Geige mit dem Filter für mehrere Eigenschaften an
quelle
OPTION 1: Verwenden des von Angular bereitgestellten Filterkomparatorparameters
OPTION 2: Verwenden der von Angular bereitgestellten Filternegation
quelle
Meine Lösung
quelle
Die beste Antwort ist:
quelle