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.