Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Don';t在AngularJS函数中通过引用传递对象_Javascript_Angularjs - Fatal编程技术网

Javascript Don';t在AngularJS函数中通过引用传递对象

Javascript Don';t在AngularJS函数中通过引用传递对象,javascript,angularjs,Javascript,Angularjs,我有一个ng repeat,它重复一个无序列表。该列表中的每个项都有一个按钮,用于调用AngularJS函数将该项添加到另一个列表中。问题是传递给函数的项是通过引用传递的。也就是说,如果我在该函数中更新了一个属性,那么该对象在我的站点中的任何地方都会被更新 我的问题的例子: 您将看到左侧列表也已更新。但我只想更新传递给函数的对象!所以,我只想看到第二个列表中的更改 如何解决这个问题?在JavaScript中,所有内容都是按值传递的。您只是在修改引用所指向的对象 您可以使用angular.cop

我有一个
ng repeat
,它重复一个无序列表。该列表中的每个项都有一个按钮,用于调用AngularJS函数将该项添加到另一个列表中。问题是传递给函数的项是通过引用传递的。也就是说,如果我在该函数中更新了一个属性,那么该对象在我的站点中的任何地方都会被更新

我的问题的例子:

您将看到左侧列表也已更新。但我只想更新传递给函数的对象!所以,我只想看到第二个列表中的更改


如何解决这个问题?

在JavaScript中,所有内容都是按值传递的。您只是在修改引用所指向的对象

您可以使用
angular.copy
创建一个新对象,并复制顶级引用

我补充说

obj = angular.copy(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);
洛达斯法

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