2015-05-17 71 views
0

我有一個ng-repeat重複一個無序列表。該列表中的每個項目都有一個按鈕,它調用AngularJS函數將該項目添加到另一個列表。問題是傳遞給該函數的項目是通過引用。意思是,如果我更新該函數中的屬性,那麼該對象在我的站點中的任何地方都會更新。我的問題不要在AngularJS函數中通過引用傳遞對象

例子: http://jsfiddle.net/XyUGE/156/

你會看到,左邊的列表也被更新。但我只想更新傳遞給函數的對象!所以,我只想看看第二個列表中的變化。

我該如何解決這個問題?

回答

8

在JavaScript中,所有內容都按值傳遞。您只是修改參考指向的對象。

您可以使用angular.copy來創建一個新對象,並複製頂層引用。

我加入

obj = angular.copy(obj); 

http://jsfiddle.net/XyUGE/157/

-1

本機方法(僅對象,子功能複製爲好)

var obj = { a : 1, b : 'str', c : function(){ return true; }}; 
// Deep 
var newObject = Object.create(obj); 

野蠻方法(無功能,不是環狀)

// Deep 
var newObject = JSON.parse(JSON.stringify(obj)); 

角方法

var newObject = angular.copy(obj); 
// or 
angular.copy(obj, newObject); 

Jquery的方法

// Shallow copy 
var newObject = jQuery.extend({}, obj); 

// Deep copy 
var newObject = jQuery.extend(true, {}, obj); 

下劃線方法

// Shallow 
var newObject = _.clone(obj); 

lodash方法

// Deep 
var newObject = _.clone(obj, true);