Подтвердить что ты не робот

Фильтрация Angular 1.2 ng-repeat с "track by" с помощью логического свойства

Я пытаюсь отфильтровать некоторые элементы списка на основе значения логического свойства, но независимо от того, что я делаю, весь список всегда отображается. Некоторые из вещей, которые я пробовал, были настолько разрушены, что ничего не видно, но что ни здесь, ни там. Я не могу заставить свою фильтрацию работать по желанию:

$scope.attendees = [
     {"firstname":"Steve",    "lastname":"Jobs",  "arrived":true,  "id":1}
    ,{"firstname":"Michelle", "lastname":"Jobs",  "arrived":false, "id":2}
    ,{"firstname":"Adam",     "lastname":"Smith", "arrived":true,  "id":3}
    ,{"firstname":"Megan",    "lastname":"Smith", "arrived":false, "id":4}
    ,{"firstname":"Dylan",    "lastname":"Smith", "arrived":false, "id":5}
    ,{"firstname":"Ethan",    "lastname":"Smith", "arrived":false, "id":6}
];

Используя следующую фильтрацию ng-repeat:

<ul>
    <li ng-repeat="person in attendees track by person.id | filter:arrived:'false'">
            {{person.lastname}}, {{person.firstname}}
    </li>
</ul>

Мне кажется, что я пробовал каждую перестановку, которую я могу найти, большинство из которых пришли из различных результатов поиска StackOverflow:

  • filter:'arrived'
  • filter:arrived
  • filter:'person.arrived'
  • filter:person.arrived
  • filter:{arrived:true}
  • filter:{arrived:'true'}
  • filter:{person.arrived:true}
  • filter:{person.arrived:'true'}

Я также попытался создать настраиваемую функцию фильтра:

$scope.isArrived = function(item) {
    return item.arrived;
};

И применяя его таким образом:

  • filter:isArrived
  • filter:'isArrived'
  • filter:{isArrived(person)}
  • filter:isArrived(person)
  • filter:'isArrived(person)'

Ничто из этого не работает. Что мне не хватает?

Здесь plnkr, демонстрирующий мою проблему.

4b9b3361

Ответ 1

Трек должен находиться в конце выражения:

<li ng-repeat="person in attendees | filter: {arrived: false } track by person.id">

Ответ 2

@Ответ Gruff прав, но только для ответа от официального источника:

Из Angular ng-repeat docs:

Примечание. track by всегда должно быть последним выражением:

<div ng-repeat="model in collection | orderBy: 'id' as filtered_result track by model.id">
  {{model.name}}
</div>

Он также появляется в части "Аргументы" в документах:

Обратите внимание, что выражение отслеживания должно быть последним, после любых фильтров, и выражение псевдонима.