Кутовий 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>

Все, що я хочу, - це показати всі запитання, де ідентифікатор НЕ -1. Що я роблю не так. Дякую!


вам потрібно написати власний фільтр, який перевіряє питання. id! = -1. Також я думаю, що ваша помилка полягає в тому, що id є атрибутом питання
SoluableNonagon

@EliteOctagon Ви можете це зробити - див. Мою відповідь нижче.
Michael Rose

Якщо ви не подивитесь на документацію? docs.angularjs.org/api/ng/filter/filter У тій частині, де expressionце пояснюється (другий p у Usage -> аргументи ), 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>

Чи може це якось спрацювати і для змінних? Ця невелика модифікація вашої скрипки поміщає "нерівну" величину у змінну, а не в константу, і вона більше не працюватиме.
Домі

Ну, вам, мабуть, потрібно написати власну функцію фільтра, давайте викличемо її, checkForXа потім використаємо як like ... | filter:checkForXі повернемо true або false, якщо є збіг ...
Michael Rose

@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

Може бути. Яку версію ви використовуєте?
Фернандо Карвальоса
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.