Podczas korzystania z angular.copy zamiast aktualizowania odniesienia tworzony jest nowy obiekt i przypisywany do miejsca docelowego (jeśli podano miejsce docelowe). Ale to nie wszystko. Jest taka fajna rzecz, która dzieje się po głębokiej kopii.
Załóżmy, że masz usługę fabryczną, która ma metody aktualizujące zmienne fabryczne.
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;
}]);
i administratora korzystającego z tej usługi,
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);
}]);
Po uruchomieniu powyższego programu dane wyjściowe będą wyglądać następująco:
****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]
Dlatego fajną rzeczą w używaniu kopii kątowej jest to, że odniesienia do miejsca docelowego są odzwierciedlane wraz ze zmianą wartości, bez konieczności ponownego ręcznego przypisywania wartości.