[英]angularjs ng-repeat with filter and track by $index not working
[英]AngularJs error when usin track by $index with filter in a ng-repeat
我在ng-repeat
列表上使用过滤器并按track by $index
时遇到麻烦。 我有一个旅馆列表,需要按城市名称过滤。
过滤器工作正常,这不是问题。 问题是过滤器之后的呈现列表。 目前有2种情况:
1:如果不使用track by
或使用track by item.id
,则开始时没有错误,但是如果选择一个选项,则会出现错误: [ngRepeat:dupes]
,可以通过使用track by $index
来解决track by $index
。
2:如果使用track by $index
进行track by $index
则无论选择什么选项都没有错误。 但是,该列表未正确更新。 当我选择一个城市时,列表将显示结果数量,但不会显示正确的结果。 例如,如果总共有12家酒店,则选择之后只有4个结果。 该列表将有4个结果,但它不会更新结果,只会将列表缩小为4个结果,但顺序相同。
例如,请参见此plunkr: https ://plnkr.co/edit/J1QQCM?p = preview
如果您按“纽约”进行过滤,则该列表将仅包含4个结果,但不会对列表进行重新排序以显示城市“纽约”的结果。 这仅在使用track by $index
时发生。
这是我正在使用的html:
<li ng-repeat="item in vm.mainList | filter:{location:filterLocation} track by $index">...</li>
数组是非常基本的东西,像这样:
{
"id": 0,
"title": "Hotel The Mirage (Hotel & Casino)",
"location": "Las Vegas, USA"
},
{
"id": 1,
"title": "Wynn Las Vegas",
"location": "Las Vegas, USA"
},[...]~
注意:我知道我可以通过使用
track by item.id
来解决此track by item.id
,但这是一个简单的示例。 在实际的列表上,我有更多的嵌套数组,最终我将以id重复结束。 因此,我需要能够使用track by $index
。
它不起作用,因为您使用的是一次性绑定语法。
我已经分叉了您的plunkr并使用了常规语法,它可以正常工作: https ://plnkr.co/edit/mLaiqsrk9uUqnaYe308F?p=preview
<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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.