我创建了一个简单的jsfiddle来说明我的问题:当一个对象从另一个对象被复制时,为什么Angular不能数据绑定数据?
HTML:
<div ng-controller="MyCtrl">
<div ng-repeat="p in products">
<span ng-click="overwrite(p)">{{ p.id }}: {{ p.name }}</span>
</div>
</div>
的Javascript:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
var products = [{id:1, name:'first'}, {id:2, name:'second'}];
$scope.products = products;
var prod = {id: 3, name:'third'};
$scope.overwrite = function(p){
p.id = 4;
p.name = 'forth';
p = prod; // this doesn't work nor does angular.copy(prod)
}
}
正如你可以看到,当我设置手动属性,值是绑定的。但是当我覆盖一个对象时,没有任何反应。这怎么可能?当我想恢复处于原始状态的对象时,我需要做些什么?
想象一下,我使用var productBackup = angular.copy(product)
创建备份对象。然后我对原始产品进行更改,稍后我决定取消更改。我想用product = productBackup
来做这个。但是这不起作用!在这种情况下,是否需要像这样手动设置所有属性?
product.id = productBackup.id;
product.name = productBackup.name;
etc...
如果你想要浅拷贝而不是深拷贝,你也可以使用angular.extend –