通过一个布尔属性来过滤一个Angular 1.2 ng-repeat和“track by”
我试图根据布尔属性的值筛选一些列表项,但不pipe我做什么,总是显示整个列表。 我试过的一些东西已经坏掉了,什么也没有显示出来,但那不是也没有。 我不能根据需要让我的过滤工作:
$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> 
我觉得我已经尝试了各种排列方式,我可以find引用,其中大部分来自各种StackOverflowsearch结果:
-  filter:'arrived'
-  filter:arrived
-  filter:'person.arrived'
-  filter:person.arrived
-  filter:{arrived:true}
-  filter:{arrived:'true'}
-  filter:{person.arrived:true}
-  filter:{person.arrived:'true'}
我也尝试创build一个自定义filter函数:
 $scope.isArrived = function(item) { return item.arrived; }; 
并如此应用:
-  filter:isArrived
-  filter:'isArrived'
-  filter:{isArrived(person)}
-  filter:isArrived(person)
-  filter:'isArrived(person)'
这些似乎没有工作。 我错过了什么?
这是一个演示我的问题的plnkr 。
轨道需要在expression式的末尾:
 <li ng-repeat="person in attendees | filter: {arrived: false } track by person.id"> 
@格鲁夫的回答是对的,但只是从官方来源回答:
从Ang
ng-repeat文档 :注意:
track by必须始终是最后一个expression式 :<div ng-repeat="model in collection | orderBy: 'id' as filtered_result track by model.id"> {{model.name}} </div>
它也出现在文档的“参数”部分:
请注意,跟踪expression式必须在最后,任何filter和别名expression式之后。