Why and when to use angular.copy? (Deep Copy)

前端 未结 7 748
無奈伤痛
無奈伤痛 2020-12-04 07:39

I\'ve been saving all the data received from services direct to local variable, controller, or scope. What I suppose would be considered a shallow copy, is that correct?

7条回答
  •  清歌不尽
    2020-12-04 08:16

    Use angular.copy when assigning value of object or array to another variable and that object value should not be changed.

    Without deep copy or using angular.copy, changing value of property or adding any new property update all object referencing that same object.

    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
    
    
    

提交回复
热议问题