Wenn Sie angular.copy verwenden, wird anstelle des Aktualisierens der Referenz ein neues Objekt erstellt und dem Ziel zugewiesen (sofern ein Ziel angegeben ist). Aber da ist noch mehr. Es gibt dieses coole Ding, das nach einer tiefen Kopie geschieht.
Angenommen, Sie haben einen Factory-Service, der Methoden zur Aktualisierung von Fabrikvariablen enthält.
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,
****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]
So ist die kühle Sache über die Verwendung von Winkeln Kopie
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);
}]);
verwendet Wenn das obige Programm ausgeführt wird die Ausgabe wie folgt,
sein Ist dies der Fall, werden die Referenzen des Ziels bei der Änderung der Werte berücksichtigt, ohne dass die Werte erneut manuell neu zugewiesen werden müssen.
U verwenden müssen angular.copy, wenn Sie Kopie des Objekts benötigen (: D). Wenn Sie ein Objekt von einem Jax-Aufruf ($ http, $ resource, ...) erhalten, müssen Sie nicht kopieren. Wenn Sie jedoch dieses Objekt in der Ansicht ändern möchten, aber das ursprüngliche Objekt in einer Art Cache behalten möchten, können Sie es kopieren. –