ho creato un semplice jsfiddle per illustrare la mia domanda:Perché Angular non esegue il databind dei dati quando un oggetto viene copiato da un altro oggetto?
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)
}
}
Come si può vedere, quando ho impostato il proprietà a mano, i valori sono legati. Ma quando sovrascrivo un oggetto, non succede nulla. Com'è possibile? E cosa devo fare quando voglio ripristinare un oggetto nel suo stato originale?
Immaginare di creare un oggetto di backup utilizzando var productBackup = angular.copy(product)
. Quindi apporto le modifiche al prodotto originale e successivamente decido di annullare le mie modifiche. Voglio farlo usando product = productBackup
. Ma questo non funziona! In questo caso, ho bisogno di impostare tutte le proprietà a mano in questo modo?
product.id = productBackup.id;
product.name = productBackup.name;
etc...
puoi anche usare angular.extend se vuoi una copia superficiale invece di una copia profonda –