ng-repeat不能处理包含dupes的集合

odw*_*dwl 14 dart angularjs angular-dart

以下代码无效,因为该集合包含dupes:

<div ng-repeat="value in [4, 4]"></div>
Run Code Online (Sandbox Code Playgroud)

我认为以下内容应该有效,但遗憾的是不起作用:

<div ng-repeat="value in [4, 4] track by $index"></div>
Run Code Online (Sandbox Code Playgroud)

那是一个错误吗?

有没有办法在ng-repeat包含欺骗的集合中使用?

提前致谢,

奥利维尔

Kia*_*Rad 17

此功能已在较新版本中添加到AngularJS中.关键是,基本上你不应该迭代一些原始类型(例如数字),而是迭代一些复杂的对象.

根据我的理解,该ngRepeat指令检查引用而不是实际值,所以如果你迭代一些复杂的对象,它会工作,但如果你试图在一组原始类型上做到这一点,它很可能不会像"所有"一样长时间工作价值观彼此不同.

编辑

以下行是副本并从此链接粘贴(并确保您使用的是AngularJS的相对最新版本 - 我正在使用1.1.5并且它工作正常 - )

描述

在ngRepeat表达式中存在重复键时发生.禁止重复键,因为AngularJS使用键将DOM节点与项目关联.

默认情况下,集合通过引用进行键控,这对于大多数常见模型来说是理想的,但对于实际的基本类型(共享引用)可能会有问题.

例如,此无效代码可能会触发此问题:

<div ng-repeat="value in [4, 4]">
</div>
Run Code Online (Sandbox Code Playgroud)

要解决此错误,请确保集合中的项具有使用track by语法的唯一标识,以指定如何跟踪模型和DOM之间的关联.

要解决上面的示例可以通过使用track by $ index来解决,这将导致项目在数组中的位置而不是它们的值上键入:

<div ng-repeat="value in [4, 4] track by $index"></div>
Run Code Online (Sandbox Code Playgroud)