Khi sử dụng angular.copy, thay vì cập nhật tham chiếu, một đối tượng mới được tạo và gán cho đích (nếu đích được cung cấp). Nhưng còn nhiều hơn thế. Có điều tuyệt vời này xảy ra sau một bản sao sâu.
Giả sử bạn có một dịch vụ xuất xưởng có các phương thức cập nhật các biến của nhà máy.
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;
}]);
và một bộ điều khiển sử dụng dịch vụ này,
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);
}]);
Khi chương trình trên được chạy, đầu ra sẽ như sau,
****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]
Do đó, điều thú vị về việc sử dụng bản sao góc là, các tham chiếu của đích được phản ánh với sự thay đổi của các giá trị, mà không phải gán lại các giá trị theo cách thủ công, một lần nữa.