Javascript 从另一个对象复制对象时,为什么Angular不进行数据绑定?

Javascript 从另一个对象复制对象时,为什么Angular不进行数据绑定?,javascript,angularjs,Javascript,Angularjs,我创建了一个简单的JSFIDLE来说明我的问题: Html: 如您所见,当我手动设置属性时,值是绑定的。但当我覆盖一个对象时,什么也不会发生。这怎么可能?当我想将一个对象恢复到它的原始状态时,我必须做什么 假设我使用var productBackup=angular.copy(product)创建了一个备份对象。然后我对原始产品进行更改,后来我决定取消更改。我想使用product=productBackup来执行此操作。但这不管用!在这种情况下,是否需要像这样手动设置所有属性 product.

我创建了一个简单的JSFIDLE来说明我的问题:

Html:

如您所见,当我手动设置属性时,值是绑定的。但当我覆盖一个对象时,什么也不会发生。这怎么可能?当我想将一个对象恢复到它的原始状态时,我必须做什么

假设我使用
var productBackup=angular.copy(product)
创建了一个备份对象。然后我对原始产品进行更改,后来我决定取消更改。我想使用
product=productBackup
来执行此操作。但这不管用!在这种情况下,是否需要像这样手动设置所有属性

product.id = productBackup.id;
product.name = productBackup.name;
etc...

我以前从未使用过AngularJS,但我认为这里的情况是,参数
p
不是简单的键/值对象,而是更复杂的AngularJS对象。通过将
prod
指定给它,您将覆盖它,而不是更改对象的特定部分

下面的代码片段可能会对您有所帮助:

for(var key in prod) {
    p[key] = prod[key];
}

如果您使用
angular.copy(源、目标)
您就能够实现设计效果

发生的情况是,即使在您完成作业后,angular仍在观察原始的
p
参考。如果使用
angular.copy()


我问了a,但它在共享服务中解决了这个问题。

最后!我正在努力让它工作几个小时!因此,问题与参考Angular正在观察的内容有关…感谢您的回答,仅供参考,这确实有效,但我更愿意采用Angular的方式:),Mark建议的方式。如果您想要浅拷贝而不是深拷贝,也可以使用Angular.extend
product.id = productBackup.id;
product.name = productBackup.name;
etc...
for(var key in prod) {
    p[key] = prod[key];
}