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!

americanslon
quelle
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>
Michael Rose
quelle
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>
Fernando Carvalhosa
quelle
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