Saltar al contenido

¿Por qué y cuándo usar angular.copy? (Copia profunda)

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 que angular.copy() crea un nuevo objeto como una copia profunda.

  • Usando = significaría que cambiar una propiedad de response.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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *