Saat menggunakan angular.copy, alih-alih memperbarui referensi, objek baru dibuat dan ditetapkan ke tujuan (jika tujuan disediakan). Tapi masih ada lagi. Ada hal keren yang terjadi setelah deep copy.
Katakanlah Anda memiliki layanan pabrik yang memiliki metode yang memperbarui variabel pabrik.
angular.module('test').factory('TestService', [function () {
var o = {
shallow: [0,1],
deep: [0,2]
};
o.shallowCopy = function () {
o.shallow = [1,2,3]
}
o.deepCopy = function () {
angular.copy([4,5,6], o.deep);
}
return o;
}]);
dan pengontrol yang menggunakan layanan ini,
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);
}]);
Ketika program di atas dijalankan outputnya adalah sebagai berikut,
****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]
Jadi hal yang keren tentang menggunakan salinan sudut adalah, referensi tujuan direfleksikan dengan perubahan nilai, tanpa harus menetapkan ulang nilai secara manual, lagi.