繁体   English   中英

复制数组的元素并推送它会导致“不允许在转发器中重复。”错误-角度

[英]Copy an element of array and push it causes “Duplicates in a repeater are not allowed.” error - Angular

我有一个复制按钮,它具有:

$scope.copyHeadline = function (headline) {
        var headlineCopy = headline;
        var current_time = Date.now();

        headlineCopy.label = headline.label + ' (Copy ' + current_time + ')';            
        $scope.headlineList.push(headlineCopy);
    }

但出现“不允许在转发器中重复”错误。 我注意到我拥有的数组或列表中的每个元素都具有某种隐藏属性,例如:

$$hashKey: "object:135"

我很确定这是重复的内容,但我无法更改?

我读到可以使用:

track by $index

但是最终发生的是,当我按下“复制”按钮时,它也同时编辑了我正在复制的原始元素,因此无法使用。

我也在考虑只创建一个全新的元素,然后编写一个将每个元素复制到一个新元素中的函数。.但是,仅这个类就有几个具有很多属性的子类。 所以我想我只是想看看在采用该方法之前是否有更简单的方法。 谢谢!

之所以发生这种情况,是因为仅将原始对象的引用分配给其他变量不会复制它。 它只是将引用复制到同一对象。

AngularJS复制文档

采用:

  var headlineCopy = angular.copy(headline);

这将复制对象的深层副本。

您的问题源于您没有复制 headline对象,而只是引用它的事实。

在不了解标题对象的情况下很难知道完整的解决方案,但是您可以尝试执行以下操作:

$scope.copyHeadline = function (headline) {
        var headlineCopy = {};
        var current_time = Date.now();

        headlineCopy.label = headline.label + ' (Copy ' + current_time + ')';            
        $scope.headlineList.push(headlineCopy);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM