这个问题在这里已有答案:
我正在尝试学习angular-js,所以我创建了一个迷你应用程序,用户在数组中添加元素,数组的值显示在上面 . 该应用程序工作正常,但在添加数组中已存在的值时崩溃 .
这是源代码 .
<div ng-app="myApp" ng-controller="myCtrl">
<p>Name: <input type="text" ng-model="firstName"></p>
<a ng-click='add(firstName)' >click me</a>
<ul>
<li ng-repeat="x in names">{{x}}
</ul>
{{msg}}
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.add = function(arg) {
alert("adding:"+arg);
$scope.names.push(arg);
}
$scope.names = ["Emil", "Tobias", "Linus"];
});
</script>
</body>
</html>
这是控制台错误,例如我添加两次名称John:
错误:[ngRepeat:dupes] http://errors.angularjs.org/1.4.8/ngRepeat/dupes?p0=x%20in%20names&p1=string%3AJohn&p2=John at Error(native)at http:// ajax .googleapis.com / ajax / libs / angularjs / 1.4.8 / angular.min.js:6:416 at http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js :280:375 at at. $(http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js:130:77)r . $ digest(http:// ajax .googleapis.com / ajax / libs / angularjs / 1.4.8 / angular.min.js:131:149)r . $ apply(http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8 /angular.min.js:134:78)在HTMLAnchorElement . (http://ajax.googleapis.com/ajax/libs/angularjs/上的(http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js:254:126) 1.4.8 / angular.min.js:35:367)在HTMLAnchorElement.Hf.d(http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js:35:314 )
发生此错误时,该功能仍然有效,因为警报弹出但输入的值未添加到数组中 . 我没有实现任何js小提琴,因为它工作正常 . 我使用chrome浏览器
1 回答
将ng-repeat替换为:
AngularJS默认跟踪元素的值,如果你有重复,它就会失败 . $ index对应于循环数组时AngularJS使用的
names[$index]
的$索引 .