Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ng重复中使用带筛选器的按$index跟踪时出现AngularJs错误_Angularjs - Fatal编程技术网

在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:如果使用
    track by$index
    则无论我选择什么选项,都不会出现错误。但是,列表没有正确更新。当我选择一个城市时,列表将显示结果的数量,但不是正确的结果。例如,如果总共有12家酒店,选择后只有4个结果。列表将有4个结果,但它不会更新结果,它只会将列表减少到4个结果,但保持相同的顺序

请参见以下示例:

如果按“纽约”筛选,列表将只有4个结果,但不会对列表重新排序以显示来自“纽约”城市的结果。只有在使用
跟踪$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>