以下代码不起作用,因为该集合包含欺骗:
<div ng-repeat="value in [4, 4]"></div>
我认为以下应该有效,但不幸的是不起作用:
<div ng-repeat="value in [4, 4] track by $index"></div>
那是一个错误吗?
有没有办法在ng-repeat
包含欺骗的集合上使用?
提前致谢,
奥利维尔
以下代码不起作用,因为该集合包含欺骗:
<div ng-repeat="value in [4, 4]"></div>
我认为以下应该有效,但不幸的是不起作用:
<div ng-repeat="value in [4, 4] track by $index"></div>
那是一个错误吗?
有没有办法在ng-repeat
包含欺骗的集合上使用?
提前致谢,
奥利维尔
此功能已添加到 AngularJS 的较新版本中。关键是基本上你不应该迭代一些原始类型(例如数字),而是一些复杂的对象。
据我了解,该ngRepeat
指令检查引用而不是实际值,因此,如果您迭代一些复杂的对象,它会起作用,但是如果您尝试对一组原始类型执行此操作,那么只要“全部”,它很可能无法工作这些值彼此不同。
编辑
以下几行是此链接的副本和粘贴(并确保您使用的是相对最新版本的 AngularJS - 我使用的是 1.1.5 并且它运行良好 -)
描述
如果 ngRepeat 表达式中有重复的键,则发生。禁止重复键,因为 AngularJS 使用键将 DOM 节点与项目相关联。
默认情况下,集合是通过引用进行键控的,这对于大多数常见模型来说是可取的,但对于实习的原始类型(共享引用)可能会出现问题。
例如,此无效代码可能会触发问题:
<div ng-repeat="value in [4, 4]"> </div>
要解决此错误,请确保集合中的项目具有唯一标识,使用 track by 语法来指定如何跟踪模型和 DOM 之间的关联。
要解决上面的示例,可以通过 $index 使用 track 来解决,这将导致项目以它们在数组中的位置而不是它们的值作为键:
<div ng-repeat="value in [4, 4] track by $index"></div>
您可以做的一件事是在角度文档中添加“track by $index”,这会将跟踪逻辑更改为元素的索引而不是元素的值,但这将显示重复的值。要仅显示唯一值,您可以通过编写如下函数过滤掉唯一值:
var uniqueValues = function(data){
var check = {};
var uniqueValue = [];
for(i-0;i<data.length;i++){
if(!check[data[i]]){
uniqueValue.push(data[i]);
check(data[i]) = true;
}
}
return uniqueValue;
}
然后对此进行 ng-repeat。
Angular 过滤器 3rd 方过滤器包含一个“唯一”过滤器,它将为您提供集合中唯一的条目。
https://github.com/a8m/angular-filter
用法:
收藏 | 独特的:'属性'