ngRepeat:使用track by $index时过滤器无效

5
这是我的 HTML。
<body>
<div ng-app="repeatdemo" ng-controller="rd">
<input type="text" ng-model="nameSearch" />
<div ng-repeat="x in names track by $index | filter : nameSearch">
{{x }}
</div>
</div>

这是我的脚本。
<script>
var rdapp=angular.module("repeatdemo",[]);
rdapp.controller("rd",function($scope){
$scope.names=['deepu','vicky','hello','hey','vickys'];

});
</script>

当我使用$index in repeat选项时,过滤器不起作用。请检查这个fiddle并尝试在ng-repeat中删除track by index


可能是重复的问题:AngularJS:使用'track by'会禁用ng-repeat中的过滤器 - shaunhusain
在这个链接中找到了一个匹配:https://dev59.com/-GEi5IYBdhLWcg3wRauf - shaunhusain
2个回答

12
问题在于你应用筛选器和“track by”顺序不正确。 http://jsfiddle.net/n3xnzvvs/1/
<div ng-repeat="x in names | filter : nameSearch track by $index">

我之前也遇到了同样的问题,后来解决了。我按照vignash的方法操作时,出现了“错误:filter:notarray 不是数组”的提示。您能解释一下这是什么原因导致的错误吗? - vinibol12

6
如果您查看ngRepeat的文档,您会在ngRepeat参数的描述中找到以下内容:

例如:item in items | filter:searchText track by item.id 是一种模式,可以与跟踪表达式一起用于对项目应用过滤器。

ng-repeat指令的代码应如下所示:
<div ng-repeat="x in names | filter: nameSearch track by $index">

1
啊,你比我更快按下了触发器 :) - shaunhusain
@shaunhusain 是的,我认为直接引用文档中的内容与你提供的代码示例链接是相等的哈。 - user9903

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接