复制Angular响应数据,这样对其中一个的更改不会影响另一个

Duplicating Angular response data so changes to one don't affect the other

本文关键字:一个 另一个 影响 数据 响应 Angular 复制      更新时间:2023-09-26

我有一个连接到node/express服务器的angular控制器。请求的响应数据在$http.get中调用,我可以设置response=$scope.x。然后可以与x相互作用和改变。然后我可以设置$scope.y = $scope.x,对y的任何更改都会导致x的更改。但是,我基本上想克隆响应,以便将原始响应数据集设置为不同的变量,而不会相互改变。

考虑response.name = "Joe" .

$scope.x = response;
$scope.y = response;

在我的代码或视图/模型,我可以改变x.name如下:

$scope.x.name = "Bob"

但是,我希望$scope.y.name仍然等于"Joe"

我可以使用两个单独的get请求来检索相同的响应,但我想将响应传递给一个函数,该函数将动态更改该数据,并根据for循环生成新版本。有没有一种干净、"有棱角"的方法来做到这一点?还是一个简单的javascript函数?

angular有一个内置的angular.copy()实用程序

$scope.x = response;
$scope.y = angular.copy(response);

还可以用来清除angular可能创建的不需要的属性,例如ng-repeat跟踪

中使用的hashkey。

angular.copy()文档

简短的回答是

$scope.y = angular.copy($scope.x)

$scope.y =_.clone($scope.x)

如果你使用lodash/underscore。


不幸的是,较长的答案更长,并且需要您了解byReference和byValue变量类型之间的区别。要理解它,请看这个答案。