Angular.copy kullanırken, referansı güncellemek yerine yeni bir nesne oluşturulur ve hedefe atanır (bir hedef sağlanmışsa). Ama dahası da var. Derin bir kopyadan sonra olan bu harika şey var.
Fabrika değişkenlerini güncelleyen yöntemlere sahip bir fabrika hizmetiniz olduğunu varsayalım.
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;
}]);
ve bu servisi kullanan bir kontrolör,
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);
}]);
Yukarıdaki program çalıştırıldığında çıktı aşağıdaki gibi olacaktır,
****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]
Dolayısıyla, açısal kopya kullanmayla ilgili en güzel şey, hedefin referanslarının, değerleri tekrar manuel olarak atamak zorunda kalmadan, değerlerin değişmesiyle yansıtılmasıdır.