我在AngularJS中遇到了一些奇怪的行为,它保留了一个变量数据,该数据被绑定到了使用范围,让我解释一下我的场景。
我有一个表单,其字段值最初通过范围变量从控制器提供,我需要在保存时将更新的值与这些初始值进行比较,因此我将初始数据保存在变量中并将该变量分配给范围。
每当我更改表单字段时,控制器变量数据也会随范围变量一起更新。我不确定这是否是正确的行为,我想只有范围应该更新。
如果这是正确的行为,请任何人建议正确的行为以及如何解决此问题。
JS Bin:http://jsbin.com/kakapinuhe/edit?html,js,console,output
通过查看上面的JSBin链接,您将很容易地了解问题,如果需要任何澄清,请告诉我。
谢谢,
希瓦
答案 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将创建一个没有任何引用的源的深层副本。