2015-09-21 24 views
0

我有了一個備份按鈕:複製數組的一個元素並推送它導致「不允許在中繼器中複製」。錯誤 - 角

$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 

但什麼結束了發生的事情是,當我按下複印按鈕,它也編輯,我是抄襲,以及使不工作的原始元素..

我也想過創建一個全新的元素,然後編寫一個函數,它會將每個元素都複製到一個新的元素中......但是這個類只有幾個具有ALOT屬性的子類。所以我想我只是想看看在採用這種方法之前是否更容易做到這一點。謝謝!

回答

1

發生這種情況是因爲只將原始對象的引用分配給不同的變量將不會生成它的副本。它只是將引用複製到同一個對象。

AngularJS copy documentation

用途:

var headlineCopy = angular.copy(headline); 

這將使對象的深副本。從事實,你是不是複製headline對象

+0

哇就是這樣......... OK讓我來試試 – user1189352

+0

它的工作! TY!只是閱讀你的編輯,所以如果我理解正確的話,因爲對象是通過引用傳遞的,我只是傳遞一個引用,而不是全部拷貝它..這是angular.copy所做的。謝謝! – user1189352

+0

我正在尋找文檔,這就是爲什麼答案的第一個版本太短了:)我很高興它的工作原理。 – Rudy

1

您的問題,莖,只是引用它。

這是很難知道完整的解決方案,而更多地瞭解你的標題對象,但你可以嘗試這樣的事:?

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

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

啊你是對的。現在已經指出,我確實意識到我正在引用它而不是製作一個物理副本。 – user1189352

相關問題