我正在使用ng-repeat测试代码, 但是使用旧版本的角度,它是有效的,但是使用最新版本它不起作用!
我解释说:
我测试了这段代码:
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.0/angular.js"></script>
<div ng-app="myApp">
<div ng-controller="MyCtrl">
<ul>
<li ng-repeat="item in items">{{item}}</li>
</ul>
<input ng-model="newItem" type="text"></input>
<button ng-click="add(newItem)">Add</button>
</div>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('MyCtrl', function($scope) {
$scope.items = ["A", "B", "C", "D"];
$scope.add = function(item) {
$scope.items.push(item);
};
});
</script>
当我添加severarls项目时,它工作正常!与angular.js / 1.1.0版本 它添加了一个新项目
但是使用最新版本它不起作用! 我们可以添加一个项目,但如果我们添加多个项目,则会出现此错误:
错误:[ngRepeat:dupes]不允许在转发器中重复。使用'track by'表达式指定唯一键。 Repeater:项目中的项目,Duplicate键:string:d
所以我的问题是我们如何在新闻版本的ng-repeat中添加新闻项目?
谢谢!
答案 0 :(得分:10)
请参阅此处https://docs.angularjs.org/error/ngRepeat/dupes
添加到您的ng-repeat
track by $index
,即:
<li ng-repeat="item in items track by $index">
演示如下:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp">
<div ng-controller="MyCtrl">
<ul>
<li ng-repeat="item in items track by $index">{{item}}</li>
</ul>
<input ng-model="newItem" type="text"></input>
<button ng-click="add(newItem)">Add</button>
</div>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('MyCtrl', function($scope) {
$scope.items = ["A", "B", "C", "D"];
$scope.add = function(item) {
$scope.items.push(item);
};
});
</script>
&#13;
答案 1 :(得分:2)
它可以工作,但是如果你添加一个已经包含在数组中的键,它就无法识别唯一的项目(因为它们是相同的)。
要解决此问题,您必须使用:
<li ng-repeat="item in items track by $index"