问题描述
我有一个连接到节点/快速服务器的角度控制器。
请求的响应数据在$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函数?
1楼
angular具有一个用于此angular.copy()的内置实用程序
$scope.x = response;
$scope.y = angular.copy(response);
也可以用于清除angular可能创建的不需要的属性,例如ng-repeat跟踪中使用的hashkey
2楼
简短的答案是
$scope.y = angular.copy($scope.x)
要么
$scope.y =_.clone($scope.x)
如果您使用lodash /下划线。
不幸的是,较长的答案会更长,并且需要您了解byReference和byValue变量类型之间的区别。 要了解它,请参阅 。