我使用的是angular.copy,但它在循环对象和赋值变量方面也很好。
与循环需要赋值的变量相比,angular.copy还有什么用途?
发布于 2019-06-26 04:46:43
当将对象或数组的值赋值给另一个变量时,请使用angular.copy,并且不应更改该对象值。
如果不使用深度复制或使用angular.copy,则更改属性值或添加任何新的属性都会更新引用同一对象的所有对象。
角: 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
对应代码:
<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>
发布于 2019-06-26 04:19:19
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种情况下:如果您更改了obj1
或obj2
,或者两者兼而有之,则不会影响另一个。
但在案例2中:如果您更改了obj1
或obj2
,则该更改将反映在另一个对象中。
因此,使用angular.copy(),这两个对象将保持独立,并且更改不会相互反映。
https://stackoverflow.com/questions/56770564
复制相似问题