Javascript ng click在第一次单击后停止工作,但仅在更高版本中

Javascript ng click在第一次单击后停止工作,但仅在更高版本中,javascript,angularjs,angularjs-ng-click,Javascript,Angularjs,Angularjs Ng Click,所以我制作了这个非常简单的脚本来隔离问题。我用angular和in the fiddle的不同版本进行了测试,如果选择版本1.1.1,效果很好。您可以按任意次数的“添加”按钮。较新的版本似乎对这种方法有问题。这是一个bug,一个安全措施还是我应该写一个指令?在本文中,我正在加载最新版本,但您可以删除此版本并将其更改为1.1.1,它将正常工作。同样,1.2.1也有同样的问题。提前谢谢你的提示 HTML 不,这不是一个有棱角的虫子。实际上,您遇到了一个错误,error:[ngRepeat:dupes

所以我制作了这个非常简单的脚本来隔离问题。我用angular和in the fiddle的不同版本进行了测试,如果选择版本1.1.1,效果很好。您可以按任意次数的“添加”按钮。较新的版本似乎对这种方法有问题。这是一个bug,一个安全措施还是我应该写一个指令?在本文中,我正在加载最新版本,但您可以删除此版本并将其更改为1.1.1,它将正常工作。同样,1.2.1也有同样的问题。提前谢谢你的提示

HTML


不,这不是一个有棱角的虫子。实际上,您遇到了一个错误,
error:[ngRepeat:dupes]
,因为它试图将同一个键添加到数组中,而
ng repeat
不允许这样做

因此,您必须使用
跟踪方式
,如下所示:

    <div ng-repeat="item in naam track by $index">
        <div>{{item}}</div>
    </div>

{{item}}

这是一个升级版。

好的,谢谢!我很困惑为什么会发生这种情况,因为旧版本确实允许这样做。让我理解一下:索引用于重复值,而不是值本身。我说得对吗?是的,没错。仅供参考,您的代码在旧版本1.1.1上可以工作,而在新版本上不能工作的原因是,自从AngularJS 1.2.x以来,它不再允许在中继器中使用重复键。@lvarayu不有趣。NgRepeat API(v.高于1.2.x)中提到的$id()函数的行为是什么?例如:
items中的item
相当于按$id(item)跟踪items中的item@klode老实说,我从未使用过
$id()
,但我想是的。基本上,Angular会自动将
$$hashkey
添加到
ng repeat
中的每个元素,以便使用添加的
$$hashkey
跟踪它们。因此,如果您编写
按$id(item)
跟踪,这也会告诉Angular再次按
$$hashkey
跟踪。从逻辑上讲,它是等价的。你可以看一看这个来获得更多的理解和理解。谢谢@LVarayut!因此,如果[1,4,4]中的
ng repeat=item
最后两个元素
4
将被分配相同的$$hashKey,从而导致重复错误?
var app = angular.module("app", []);

    app.controller("ctrl", function ($scope) {
        $scope.naam = [
            "1",
            "2"];
        $scope.add = function () {
            var x = 3;
            var y = 4;
            $scope.naam.push(x, y);
        }

    });
    <div ng-repeat="item in naam track by $index">
        <div>{{item}}</div>
    </div>