Bei Verwendung von angle.copy wird anstelle der Aktualisierung der Referenz ein neues Objekt erstellt und dem Ziel zugewiesen (sofern ein Ziel angegeben ist). Aber es gibt noch mehr. Es gibt diese coole Sache, die nach einer tiefen Kopie passiert.
Angenommen, Sie haben einen Factory-Service mit Methoden zum Aktualisieren von Factory-Variablen.
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;
}]);
und eine Steuerung, die diesen Dienst verwendet,
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);
}]);
Wenn das obige Programm ausgeführt wird, lautet die Ausgabe wie folgt:
****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]
Das Coole an der Verwendung von Winkelkopien ist daher, dass die Referenzen des Ziels bei der Änderung der Werte wiedergegeben werden, ohne dass die Werte erneut manuell zugewiesen werden müssen.