我創建了一個簡單的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 –