如何保存对象的初始数据?

时间:2015-06-15 09:02:57

标签: angularjs

我在AngularJS中遇到了一些奇怪的行为,它保留了一个变量数据,该数据被绑定到了使用范围,让我解释一下我的场景。

我有一个表单,其字段值最初通过范围变量从控制器提供,我需要在保存时将更新的值与这些初始值进行比较,因此我将初始数据保存在变量中并将该变量分配给范围。

每当我更改表单字段时,控制器变量数据也会随范围变量一起更新。我不确定这是否是正确的行为,我想只有范围应该更新。

如果这是正确的行为,请任何人建议正确的行为以及如何解决此问题。

JS Bin:http://jsbin.com/kakapinuhe/edit?html,js,console,output

通过查看上面的JSBin链接,您将很容易地了解问题,如果需要任何澄清,请告诉我。

谢谢,
希瓦

2 个答案:

答案 0 :(得分:2)

是的,这是javascript的预期行为。分配时:

$scope.formData = initData;

您没有复制initData变量。相反,您的formData引用与initData相同的内存空间。简而言之,它们指的是相同的数据..所以即使formData改变了......你的initData也会丢失。

您可以使用angular.copy()

解决此问题
$scope.formData = angular.copy(initData);

以下是修改后的JSbin:http://jsbin.com/yoviyesero/edit?html,js,console,output

答案 1 :(得分:2)

使用angular.copy

原因:当你写

$scope.formData = initData.

您正在创建对同一对象initData的引用。因此$ scope.formData中的任何更改也会反映在对象中。使用angular.copy将创建一个没有任何引用的源的深层副本。