在ng重复中使用带筛选器的按$index跟踪时出现AngularJs错误
在在ng重复中使用带筛选器的按$index跟踪时出现AngularJs错误,angularjs,Angularjs,在ng repeat列表和track by$index上使用筛选器时遇到问题。我有一个酒店列表,需要按城市名称进行筛选 过滤器工作正常,这不是问题所在。问题是过滤器后的呈现列表。目前有两种情况: 1:如果不使用track by或使用track by item.id在搜索时没有错误,但是如果我选择了一个选项,我将得到错误:[ngRepeat:dups],这可以通过使用track by$index解决 2:如果使用track by$index则无论我选择什么选项,都不会出现错误。但是,列表没有正确
ng repeat
列表和track by$index
上使用筛选器时遇到问题。我有一个酒店列表,需要按城市名称进行筛选
过滤器工作正常,这不是问题所在。问题是过滤器后的呈现列表。目前有两种情况:
- 1:如果不使用
或使用track by
在搜索时没有错误,但是如果我选择了一个选项,我将得到错误:track by item.id
,这可以通过使用[ngRepeat:dups]
解决track by$index
- 2:如果使用
则无论我选择什么选项,都不会出现错误。但是,列表没有正确更新。当我选择一个城市时,列表将显示结果的数量,但不是正确的结果。例如,如果总共有12家酒店,选择后只有4个结果。列表将有4个结果,但它不会更新结果,它只会将列表减少到4个结果,但保持相同的顺序track by$index
跟踪$index
时才会发生这种情况
这是我正在使用的html:
<li ng-repeat="item in vm.mainList | filter:{location:filterLocation} track by $index">...</li>
注意:我知道我可以通过使用
track by item.id
解决这个问题,但这是一个简单的例子。在实际列表中,我有更多的嵌套数组,最终我将以重复id结束。所以我需要能够使用跟踪$index
它不起作用,因为您使用的是一次性绑定语法 我已经将您的plunkr分叉并使用了常规语法,它可以工作:
-
{{item.title}}-{{$index}
{{item.location}
working@z.a.选择纽约市。该列表将有4个结果,但都来自拉斯维加斯。@z.a.我更新了plunkr以显示带有标题的$Index。你可以选择适当减少结果的数量,但不包括顺序。我删除了track by$index
,plunkr对我来说非常适合,没有任何错误。它确实有效。我认为只有这样使用时,一个绑定才会影响它:ng repeat=“项目位于::vm.mainList
。因为我只控制项中的项,而过滤器正在对整个数组重新排序。你知道为什么吗?@CelsomTrindade对不起,我不能告诉你足够多的内部信息来告诉你为什么它会这样工作。这表明问题可能是您在ng repeat子句中将单个属性的一次性绑定与常规绑定混合在一起,因此您可以尝试将它们都一次性绑定。但是整个数组不会更新。但好吧,如果这是我们的限制,我会处理的。但是谢谢你的帮助!
{
"id": 0,
"title": "Hotel The Mirage (Hotel & Casino)",
"location": "Las Vegas, USA"
},
{
"id": 1,
"title": "Wynn Las Vegas",
"location": "Las Vegas, USA"
},[...]~
<ul>
<li ng-repeat="item in vm.mainList | filter:{location:filterLocation} track by $index">
<h4>{{ item.title }} - {{$index}}</h4>
<p>{{ item.location }}</p>
</li>
</ul>