首页 文章

在角度js上的数组上添加重复时出错[重复]

提问于
浏览
1

这个问题在这里已有答案:

我正在尝试学习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 回答

  • 2

    将ng-repeat替换为:

    <ul>
       <li ng-repeat="x in names track by $index">{{x}}
    </ul>
    

    AngularJS默认跟踪元素的值,如果你有重复,它就会失败 . $ index对应于循环数组时AngularJS使用的 names[$index] 的$索引 .

相关问题