Quando si utilizza angular.copy, anziché aggiornare il riferimento, viene creato e assegnato un nuovo oggetto alla destinazione (se viene fornita una destinazione). Ma c'è di più. C'è questa cosa interessante che succede dopo una copia profonda.
Supponi di avere un servizio di fabbrica che ha metodi che aggiornano le variabili di fabbrica.
angular.module('test').factory('TestService', [function () {
var o = {
shallow: [0,1], // initial value(for demonstration)
deep: [0,2] // initial value(for demonstration)
};
o.shallowCopy = function () {
o.shallow = [1,2,3]
}
o.deepCopy = function () {
angular.copy([4,5,6], o.deep);
}
return o;
}]);
e un controller che utilizza questo servizio,
angular.module('test').controller('Ctrl', ['TestService', function (TestService) {
var shallow = TestService.shallow;
var deep = TestService.deep;
console.log('****Printing initial values');
console.log(shallow);
console.log(deep);
TestService.shallowCopy();
TestService.deepCopy();
console.log('****Printing values after service method execution');
console.log(shallow);
console.log(deep);
console.log('****Printing service variables directly');
console.log(TestService.shallow);
console.log(TestService.deep);
}]);
Quando viene eseguito il programma sopra, l'output sarà il seguente,
****Printing initial values
[0,1]
[0,2]
****Printing values after service method execution
[0,1]
[4,5,6]
****Printing service variables directly
[1,2,3]
[4,5,6]
Quindi la cosa bella dell'uso della copia angolare è che i riferimenti della destinazione si riflettono con il cambio di valori, senza dover riassegnare i valori manualmente, ancora una volta.