我有一個ng-repeat
重複一個無序列表。該列表中的每個項目都有一個按鈕,它調用AngularJS函數將該項目添加到另一個列表。問題是傳遞給該函數的項目是通過引用。意思是,如果我更新該函數中的屬性,那麼該對象在我的站點中的任何地方都會更新。我的問題不要在AngularJS函數中通過引用傳遞對象
例子: http://jsfiddle.net/XyUGE/156/
你會看到,左邊的列表也被更新。但我只想更新傳遞給函數的對象!所以,我只想看看第二個列表中的變化。
我該如何解決這個問題?
我有一個ng-repeat
重複一個無序列表。該列表中的每個項目都有一個按鈕,它調用AngularJS函數將該項目添加到另一個列表。問題是傳遞給該函數的項目是通過引用。意思是,如果我更新該函數中的屬性,那麼該對象在我的站點中的任何地方都會更新。我的問題不要在AngularJS函數中通過引用傳遞對象
例子: http://jsfiddle.net/XyUGE/156/
你會看到,左邊的列表也被更新。但我只想更新傳遞給函數的對象!所以,我只想看看第二個列表中的變化。
我該如何解決這個問題?
在JavaScript中,所有內容都按值傳遞。您只是修改參考指向的對象。
您可以使用angular.copy
來創建一個新對象,並複製頂層引用。
我加入
obj = angular.copy(obj);
本機方法(僅對象,子功能複製爲好)
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);