我变得疯了。这个hello-worldesque例子有什么不对?我试图用angularjs 1.5.5测试一些基本的东西。
HTML:
<div ng-app="myApp" ng-controller="Ctrl">
<h3>test 1:</h3>
<span ng-repeat="label in test(1)">{{label}}</span>
<h3>test 2:</h3>
<span ng-repeat="label in test(2)">{{label}}</span>
</div>
JS:
angular.module('myApp', [])
.controller('Ctrl', ['$scope', function ($scope) {
$scope.test = function(amount) {
var result = [];
result.push("1");
for (var i = 0; i < amount; i++) {
result.push("2");
}
result.push("3");
return result;
}
}]);
JsFiddle:http://jsfiddle.net/d3v6vq7w/7/
Simpy put,循环使用1次迭代,但不是例如2.没有任何东西被打印出来。是什么给了什么?
答案 0 :(得分:4)
您返回的数组中有重复项。添加track by $index
可以解决您的问题。
<span ng-repeat="label in test(2) track by $index">{{label}}</span>
答案 1 :(得分:3)
如果你看一下错误信息,你就会得到答案。
错误:ngRepeat:dupes重复中的重复键重复 转发器是不允许的。使用'track by'表达式指定唯一 键。 Repeater:test in test(2),Duplicate key:string:2,Duplicate 价值:2
禁止重复键,因为AngularJS使用键来关联DOM 带有项目的节点。
答案 2 :(得分:1)
那是因为不允许在转发器中重复。使用“track by”表达式来解决此问题。
在您的示例中,test2返回[1,2,2,3],它具有重复元素。
上面的示例可以通过$ index使用track来解决。
您可以参考angular js文档:https://docs.angularjs.org/error/ngRepeat/dupes