In meinem Controller möchte ich ein Array von Objekten filtern. Jedes dieser Objekte ist eine Karte, die sowohl Zeichenfolgen als auch Listen enthalten kann
Ich habe versucht, das $filter('filter')(array, function)
Format zu verwenden, weiß aber nicht, wie ich auf die einzelnen Elemente des Arrays in meiner Funktion zugreifen soll. Hier ist ein Ausschnitt, um zu zeigen, was ich will.
$filter('filter')(array, function() {
return criteriaMatch(item, criteria);
});
Und dann criteriaMatch()
werde ich in der prüfen, ob jede einzelne Eigenschaft übereinstimmt
var criteriaMatch = function(item, criteria) {
// go thro each individual property in the item and criteria
// and check if they are equal
}
Ich muss all dies in der Steuerung tun und eine Liste von Listen zusammenstellen und sie in den Bereich setzen. Ich muss also nur auf $filter('filter')
diese Weise darauf zugreifen . Alle Beispiele, die ich bisher im Netz gefunden habe, haben statische Kriteriensuchen innerhalb der Funktion, sie übergeben kein Kriterienobjekt und testen nicht für jedes Element im Array.
quelle
Antworten:
Sie können es folgendermaßen verwenden: http://plnkr.co/edit/vtNjEgmpItqxX5fdwtPi?p=preview
Akzeptiert, wie Sie festgestellt haben,
filter
eine Prädikatfunktion, die Element für Element aus dem Array akzeptiert. Sie müssen also nur eine Prädikatfunktion erstellen, die auf der angegebenen basiertcriteria
.In diesem Beispiel
criteriaMatch
handelt es sich um eine Funktion, die eine Prädikatfunktion zurückgibt, die der angegebenen entsprichtcriteria
.Vorlage:
Umfang:
quelle
filter
Methode im Array-Objekt verwenden:array.filter(function(item){return item.name === criteria.name;})
Hier ist ein Beispiel dafür, wie Sie es
filter
in Ihrem AngularJS-JavaScript verwenden würden (und nicht in einem HTML-Element).In diesem Beispiel haben wir ein Array von Länderdatensätzen, die jeweils einen Namen und einen dreistelligen ISO-Code enthalten.
Wir möchten eine Funktion schreiben, die diese Liste nach einem Datensatz durchsucht, der einem bestimmten dreistelligen Code entspricht.
So würden wir es machen, ohne zu verwenden
filter
:Ja, daran ist nichts auszusetzen.
Aber so würde dieselbe Funktion aussehen, wenn man Folgendes verwendet
filter
:Viel ordentlicher.
Denken Sie daran, dass
filter
als Ergebnis ein Array zurückgegeben wird (eine Liste übereinstimmender Datensätze). In diesem Beispiel möchten wir entweder 1 Datensatz oder NULL zurückgeben.Hoffe das hilft.
quelle
Wenn Sie den Filter in Ihrem Controller auf die gleiche Weise wie hier verwenden möchten:
Sie könnten so etwas tun wie:
quelle
var filteredItems = $filter('criteriaMatch')(items, criteria);