При использовании 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]
Таким образом, отличная особенность использования углового копирования состоит в том, что ссылки на место назначения отражаются при изменении значений, без необходимости повторного присвоения значений вручную.