Angular JS Filter ist nicht gleich


83

Scheint eine sehr grundlegende Frage zu sein, aber ich kann die Syntax nicht richtig verstehen.

<li class="list-group-item" ng-repeat="question in newSection.Questions | filter:Id != '-1'; " ng-mouseenter="hover = true" ng-mouseleave="hover = false">
    <div href="#" editable-text="question.Text">{{question.Text}}</div>
</li>

Ich möchte nur alle Fragen anzeigen, bei denen id NICHT -1 ist. Was mache ich falsch. Vielen Dank!


Sie müssen einen benutzerdefinierten Filter schreiben, der die question.id! = -1 überprüft. Ich denke auch, Ihr Fehler ist, dass ID ein Attribut der Frage ist
SoluableNonagon

@EliteOctagon Du kannst es schaffen - siehe meine Antwort unten.
Michael Rose

Sehen Sie sich die Dokumentation an? docs.angularjs.org/api/ng/filter/filter In dem Teil, in dem expressionerklärt wird (zweites p bei Verwendung -> Argumente ) filter: {Id: "!-1"}oder so etwas sollte der Trick sein
Nebulosar

Antworten:


165

Die Syntax ist nur ein bisschen anders, versuchen Sie:

<li class="list-group-item"
    ng-repeat="question in newSection.Questions | filter:{ Id: '!-1'}"
    ng-mouseenter="hover = true" ng-mouseleave="hover = false">

    <div href="#" editable-text="question.Text">{{question.Text}}</div>
</li>

Siehe ein wenig JSFiddle: http://jsfiddle.net/U3pVM/3845/

Bearbeiten:

Beispiel mit Variablen:

<script> var invalidId = '-1'; </script>
<li class="list-group-item"
    ng-repeat="question in newSection.Questions | filter:{ Id: '!' + invalidId}"
    ng-mouseenter="hover = true" ng-mouseleave="hover = false">

    <div href="#" editable-text="question.Text">{{question.Text}}</div>
</li>

Kann das irgendwie auch für Variablen funktionieren? Diese geringfügige Änderung Ihrer Geige platziert die "ungleiche" Menge in einer Variablen anstelle einer Konstanten und funktioniert nicht mehr.
Domi

Nun, Sie müssen wahrscheinlich Ihre eigene Filterfunktion schreiben, sie aufrufen checkForXund dann wie verwenden ... | filter:checkForXund true oder false zurückgeben, wenn es eine Übereinstimmung gibt ...
Michael Rose

@Domi, ich habe eine allgemeinere Antwort gepostet, die Ihre Frage beantwortet. Probieren Sie es aus, wenn Sie Zeit haben
Fernando Carvalhosa

1
@Tielman, keine Notwendigkeit, zusätzliche Variablen zu deklarieren. Das funktioniert gut: "filter: {id: '!' + notValid} "
Stalinko

11
Dies wird herauszufiltern auch jede Idwelche enthält -1als Teil wie -11oder 2-1. Um zuverlässig zu überprüfen, ob dies Idnicht der -1Fall ist, sollten Sie eine kleine Komparatorfunktion schreiben und diese als Filter verwenden.
Andrew.Punnett

20

Obwohl die Antwort von @Michael Rose in diesem Fall funktioniert, glaube ich nicht, dass dies der Fall ist, wenn Sie versuchen, zu filtern, dass ein Objekt / eine Variable nicht gleich ist

In diesem Fall könnten Sie verwenden:

JS :

filterId = -1

HTML:

<li ng-repeat="question in newSection.Questions | filter: !{ Id: filterId}">
</li>

Ein noch verschachtelterer Fall:

JS :

someQuestion = {
   someObject: {
     Id: 1
   }
}
newSection.Questions = [someQuestion]

HTML

<li ng-repeat="question in newSection.Questions | filter: !{someObject : {Id: -1} }">
</li>

1
Diese Syntax funktioniert bei mir nicht :! {Id: -1}, aber die alternative Antwort funktioniert hervorragend: {Id: '! - 1'}. Vielleicht ist / war es ein Versionsunterschied?
Python1981

Könnte sein. Welche Version verwenden Sie?
Fernando Carvalhosa
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.