Verificamos cada posts en nuestra página web con la meta de enseñarte en todo momento información con la mayor veracidad y actualizada.
Solución:
Use angular.copy cuando asigne el valor del objeto o array a otra variable y que object
el valor no debe cambiarse.
Sin que copia profunda o usando copia angularcambiar el valor de la propiedad o agregar cualquier propiedad nueva actualizar todos los objetos haciendo referencia a ese mismo objeto.
var app = angular.module('copyExample', []);
app.controller('ExampleController', ['$scope',
function($scope)
$scope.printToConsole = function()
$scope.main =
first: 'first',
second: 'second'
;
$scope.child = angular.copy($scope.main);
console.log('Main object :');
console.log($scope.main);
console.log('Child object with angular.copy :');
console.log($scope.child);
$scope.child.first = 'last';
console.log('New Child object :')
console.log($scope.child);
console.log('Main object after child change and using angular.copy :');
console.log($scope.main);
console.log('Assing main object without copy and updating child');
$scope.child = $scope.main;
$scope.child.first = 'last';
console.log('Main object after update:');
console.log($scope.main);
console.log('Child object after update:');
console.log($scope.child);
]);
// Basic object assigning example
var main =
first: 'first',
second: 'second'
;
var one = main; // same as main
var two = main; // same as main
console.log('main :' + JSON.stringify(main)); // All object are same
console.log('one :' + JSON.stringify(one)); // All object are same
console.log('two :' + JSON.stringify(two)); // All object are same
two =
three: 'three'
; // two changed but one and main remains same
console.log('main :' + JSON.stringify(main)); // one and main are same
console.log('one :' + JSON.stringify(one)); // one and main are same
console.log('two :' + JSON.stringify(two)); // two is changed
two = main; // same as main
two.first = 'last'; // change value of object's property so changed value of all object property
console.log('main :' + JSON.stringify(main)); // All object are same with new value
console.log('one :' + JSON.stringify(one)); // All object are same with new value
console.log('two :' + JSON.stringify(two)); // All object are same with new value
En ese caso, no es necesario utilizar angular.copy()
Explicación :
-
=
representa una referencia mientras queangular.copy()
crea un nuevo objeto como una copia profunda. -
Usando
=
significaría que cambiar una propiedad deresponse.data
cambiaría la propiedad correspondiente de$scope.example
o viceversa. -
Usando
angular.copy()
los dos objetos permanecerían separados y los cambios no se reflejarían entre sí.
yo diría angular.copy(source);
en tu situación es innecesario si luego no lo usas es sin destino angular.copy(source, [destination]);
.
Si se proporciona un destino, todos sus elementos (para arreglos) o propiedades (para objetos) se eliminan y luego todos los elementos/propiedades del origen se copian en él.
https://docs.angularjs.org/api/ng/function/angular.copy
Si para ti ha sido de utilidad nuestro artículo, nos gustaría que lo compartas con más seniors y nos ayudes a difundir este contenido.