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