498 Stimmen

Ng-repeat: filtern nach einem einzelnen Feld

Ich habe ein Array von Produkten, das ich mit ng-repeat wiederhole, und benutze

um diese Produkte nach Farbe zu filtern. Der Filter funktioniert, aber wenn der Produktname / die Beschreibung usw. die Farbe enthält, bleibt das Produkt nach Anwendung des Filters bestehen.

Wie kann ich den Filter so einstellen, dass er nur auf das Farbfeld meines Arrays angewendet wird, anstatt auf jedes Feld?

66voto

Petr B. Punkte 869

Sei vorsichtig mit dem Angular-Filter. Wenn du einen bestimmten Wert im Feld auswählen möchtest, kannst du den Filter nicht verwenden.

Beispiel:

javascript

app.controller('FooCtrl', function($scope) {
   $scope.products = [
       { id: 1, name: 'test', color: 'lightblue' },
       { id: 2, name: 'bob', color: 'blue' }
       /*... etc... */
   ];
});

html

Dies wird beide auswählen, weil etwas wie substr verwendet wird. Das bedeutet, dass du Produkte auswählen möchtest, bei denen "color" den String "blue" enthält und nicht, wo "color" "blue" ist.

23voto

CyberNinja Punkte 852

Nach Farbe suchen:

Sie können auch eine innere Verschachtelung durchführen.

filter:{prop1:{innerprop1:searchinput}}

10voto

Phil Punkte 1032

Wenn Sie Folgendes tun würden:

    {{preference.itemTitle}}

... würden Sie nicht nur Elemente mit itemTypeId 2 und itemStatus 1 erhalten, sondern auch Elemente mit itemType 20, 22, 202, 123 und itemStatus 10, 11, 101, 123. Dies liegt daran, dass die filter: {...} Syntax wie eine String-Contains-Abfrage funktioniert.

Wenn Sie jedoch die Bedingung : true hinzufügen würden, würde sie nach genauer Übereinstimmung filtern:

    {{preference.itemTitle}}

7voto

Asad Ali Khan Punkte 307

Mein Weg ist dieser

Unterrichtsfächer sind

[{"id":"1","title":"GFATM"},{"id":"2","title":"Gerichtsfall"},{"id":"3","title":"Erneuerung/Gültigkeit"},{"id":"4","title":"Änderung von Details"},{"id":"5","title":"Schüleranfrage"},{"id":"6","title":"Beschwerden"}]

sub ist ein Eingabefeld oder was auch immer Sie möchten

So anzeigen

{{x.title}}

4voto

amit banerjee Punkte 61

Sie müssen filter:{color_name:by_colour} anstelle von

filter:by_colour

Wenn Sie mit einem einzelnen Eigenschaft eines Objekts übereinstimmen möchten, schreiben Sie dann diese Eigenschaft anstelle des Objekts, ansonsten wird eine andere Eigenschaft übereinstimmen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X