Угловой фильтр JS не равен

83

Похоже на очень простой вопрос, но я не могу понять синтаксис ..

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

Все, что я хочу, это показать все вопросы, где id НЕ -1. Что я делаю неправильно. Благодаря!

американец
источник
вам нужно написать собственный фильтр, который будет проверять question.id! = -1. Также я думаю, что ваша ошибка заключается в том, что id является атрибутом вопроса
SoluableNonagon
@EliteOctagon Вы можете это сделать - см. Мой ответ ниже.
Майкл Роуз
Вы смотрите документацию? docs.angularjs.org/api/ng/filter/filter В той части, где expressionобъясняется (второй p в Usage -> arguments ) filter: {Id: "!-1"}или что-то подобное, должно помочь
Nebulosar

Ответы:

165

Синтаксис немного неправильный, попробуйте:

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

См. Небольшой JSFiddle: http://jsfiddle.net/U3pVM/3845/

Редактировать:

Пример с переменными:

<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>
Майкл Роуз
источник
Может ли это как-то работать и с переменными? Эта небольшая модификация вашей скрипки помещает "не равное" количество в переменную вместо константы, и она больше не будет работать.
Domi
Что ж, вам, вероятно, нужно написать свою собственную функцию фильтра, давайте назовем ее, checkForXа затем используем ее как ... | filter:checkForXи вернем истину или ложь, если есть совпадение ...
Майкл Роуз
@Domi, я опубликовал более общий ответ, который отвечает на ваш вопрос. Проверьте это, когда у вас будет время
Фернандо Карвалоса
1
@Tielman, не нужно объявлять лишние переменные. Это хорошо работает: "filter: {id: '!' + notValid} »
Сталинко
11
Это также отфильтрует все, Idчто содержит -1в качестве подстроки, например -11или 2-1. Чтобы надежно проверить, что Idэто не так, -1вы должны написать небольшую функцию компаратора и использовать ее в качестве фильтра.
andypea
20

Хотя ответ @Michael Rose работает в этом случае, я не думаю, что он будет, если вы попытаетесь отфильтровать не равный некоторому объекту / переменной

В этом случае вы можете использовать:

JS :

filterId = -1

HTML:

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

Еще более сложный случай:

JS :

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

HTML

<li ng-repeat="question in newSection.Questions | filter: !{someObject : {Id: -1} }">
</li>
Фернандо Карвалоса
источник
1
Этот синтаксис у меня не работает:! {Id: -1}, но альтернативный ответ отлично работает: {Id: '! - 1'}. Возможно, это разница в версиях?
python1981
Может быть. Какую версию ты используешь?
Фернандо