【问题标题】:use of angular.copy [duplicate]使用 angular.copy [重复]
【发布时间】:2019-11-08 06:24:44
【问题描述】:

我正在使用 angular.copy,但它在循环对象和分配变量方面也很有效。

angular.copy 比循环需要赋值的变量有什么用?

【问题讨论】:

  • 取决于您的需要和价值观。

标签: angularjs


【解决方案1】:

使用 angular.copy,将对象或数组的值分配给另一个变量并且不应更改该对象值。

没有深拷贝或使用angular.copy,更改属性值或添加任何新属性更新所有对象引用同一对象。

Angular:js 文件

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

HTML对应代码:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="copyExample" ng-controller="ExampleController">
  <button ng-click='printToConsole()'>Explain</button>
</div>

【讨论】:

    【解决方案2】:

    angular.copy() 创建一个新对象作为深拷贝,这意味着这两个对象将相互独立。

    进行常规循环和分配,我假设您使用的是= 运算符,这意味着更改原始对象的属性会更改复制对象的相应属性,反之亦然。

    例如,考虑一个对象:

    let obj1 = {something};
    
    let obj2; //you want to copy obj1 into obj2
    
    //case 1: using angular.copy
    obj2 = angular.copy(obj1);  
    
    //case 2: using =
    obj2 = obj1;
    

    情况1:如果你改变了obj1obj2或两者,不会影响另一个。

    但在情况 2 中:如果您更改 obj1obj2,则该更改会反映在另一个对象中。

    因此, 使用 angular.copy() 两个对象将保持分离,并且更改不会相互反映。

    【讨论】:

      猜你喜欢
      • 2014-12-26
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多