Kątowy filtr JS nie jest równy

83

Wydaje się, że jest to bardzo podstawowe pytanie, ale nie mogę uzyskać właściwej składni.

<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>

Chcę tylko pokazać wszystkie pytania, w których id NIE jest -1. Co ja robię źle. Dzięki!

americanslon
źródło
musisz napisać własny filtr, który sprawdza pytanie.id! = -1. Myślę też, że twoim błędem jest to, że id jest atrybutem pytania
SoluableNonagon
@EliteOctagon Możesz to zrobić - zobacz moją odpowiedź poniżej.
Michael Rose
Czy spojrzałeś na dokumentację? docs.angularjs.org/api/ng/filter/filter W części, w której expressionjest wyjaśnione (drugie p w Użycie -> argumenty ) filter: {Id: "!-1"}lub coś takiego powinno załatwić
sprawę

Odpowiedzi:

165

Składnia jest trochę błędna, spróbuj:

<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>

Zobacz trochę JSFiddle: http://jsfiddle.net/U3pVM/3845/

Edytować:

Przykład ze zmiennymi:

<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
źródło
Czy to w jakiś sposób działa również dla zmiennych? Ta niewielka modyfikacja twoich skrzypiec umieszcza „nierówną” ilość w zmiennej zamiast stałej i to już nie zadziała.
Domi
Cóż, prawdopodobnie musisz napisać własną funkcję filtrującą, nazwijmy ją, checkForXa następnie użyj jej jak ... | filter:checkForXi zwróć prawdę lub fałsz, jeśli istnieje dopasowanie ...
Michael Rose
@Domi, opublikowałem bardziej ogólną odpowiedź, która odpowiada na twoje pytanie. Sprawdź to, kiedy będziesz miał czas
Fernando Carvalhosa
1
@Tielman, nie ma potrzeby deklarowania dodatkowych zmiennych. To działa dobrze: "filter: {id: '!' + notValid} "
Stalinko,
11
Spowoduje to również odfiltrowanie wszystkich elementów Idzawierających -1jako podciąg, takich jak -11lub 2-1. Aby niezawodnie sprawdzić, czy Idnie -1, należy napisać małą funkcję porównującą i użyć jej jako filtra.
andypea
20

Chociaż odpowiedź @Michael Rose działa w tym przypadku, nie sądzę, aby tak było, jeśli spróbujesz filtrować różne obiekty / zmienne

W takim przypadku możesz użyć:

JS :

filterId = -1

HTML:

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

Jeszcze bardziej zagnieżdżony przypadek:

JS :

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

HTML

<li ng-repeat="question in newSection.Questions | filter: !{someObject : {Id: -1} }">
</li>
Fernando Carvalhosa
źródło
1
Ta składnia nie działa dla mnie:! {Id: -1}, ale alternatywna odpowiedź działa świetnie: {Id: '! - 1'}. Może to jest / była różnica wersji?
python1981
Możliwe. Jakiej wersji używasz?
Fernando Carvalhosa