Я создал простой jsfiddle, чтобы проиллюстрировать свой вопрос:
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...