เมื่อใช้ angular.copy แทนที่จะอัปเดตข้อมูลอ้างอิงวัตถุใหม่จะถูกสร้างและกำหนดให้กับปลายทาง (หากมีการระบุปลายทาง) แต่ยังมีอีกมาก มีสิ่งดีๆที่เกิดขึ้นหลังจากทำสำเนาลึก
สมมติว่าคุณมีบริการโรงงานซึ่งมีวิธีการที่ปรับปรุงตัวแปรของโรงงาน
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;
}]);
และตัวควบคุมที่ใช้บริการนี้
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);
}]);
เมื่อเรียกใช้โปรแกรมข้างต้นผลลัพธ์จะเป็นดังนี้
****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]
ดังนั้นสิ่งที่ยอดเยี่ยมเกี่ยวกับการใช้การทำสำเนาเชิงมุมคือการอ้างอิงของปลายทางนั้นสะท้อนให้เห็นถึงการเปลี่ยนแปลงของค่าโดยไม่ต้องกำหนดค่าใหม่ด้วยตนเองอีกครั้ง