通过一个布尔属性来过滤一个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式之后。