角度 - 对象似乎彼此绑定但不是

时间:2015-12-18 13:21:48

标签: angularjs binding

我有一个编辑页面,用户可以在其中编辑系统中的文件,然后保存。在加载文件时,我从结果中创建了两个对象,一个绑定到视图,另一个我希望保持(处于其原始状态)直到" save"单击,然后使用它与视图绑定对象进行比较,以查看是否已进行任何更改。

因此,当页面加载时,正在运行

$http.get('/api/files/' + $stateParams.id)
  .then(function (result) {
      vm.fileTemp = result.data;
      vm.fileTempCopy = result.data;

视图中的任何内容或控制器中的其他地方都没有触摸或引用fileTempCopy,除了在save-method中,我检查它们是否相似。但不知何故,当我对输入字段进行更改时(例如它们都被用作输入的ng模型),它们都会更新。

 if(vm.fileTemp === vm.fileTempCopy)//in save-function

总是如此,他们的字段完全相同。

为什么会发生这种情况,我该如何解决?

2 个答案:

答案 0 :(得分:3)

使用赋值运算符,实际上只是引用原始数组。数组是引用类型。这意味着,他们实际上并不存储值,他们只存储对这些值的引用。你在做什么是复制对内存位置的引用,这意味着对该位置的内存的任何更改(包括删除元素)都将反映在两个数组中。

所以你会想要这样做:

  vm.fileTemp = angular.copy(result.data);
  vm.fileTempCopy = angular.copy(result.data);

答案 1 :(得分:0)

这是检查对象"价值平等的一种非常基本的方法"。

$store