私の質問を説明するために、単純な 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...