Ответ 1
Трек должен находиться в конце выражения:
<li ng-repeat="person in attendees | filter: {arrived: false } track by person.id">
Я пытаюсь отфильтровать некоторые элементы списка на основе значения логического свойства, но независимо от того, что я делаю, весь список всегда отображается. Некоторые из вещей, которые я пробовал, были настолько разрушены, что ничего не видно, но что ни здесь, ни там. Я не могу заставить свою фильтрацию работать по желанию:
$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, демонстрирующий мою проблему.
Трек должен находиться в конце выражения:
<li ng-repeat="person in attendees | filter: {arrived: false } track by person.id">
@Ответ 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>
Он также появляется в части "Аргументы" в документах:
Обратите внимание, что выражение отслеживания должно быть последним, после любых фильтров, и выражение псевдонима.