我有类似的东西:
$scope.array1_copy=$scope.array1[$scope.index];
$scope.array1
是一个数组,由填充了对象的较小数组组成。
现在,当我对$ scope.array1_copy进行更改时,更改将反映在$ scope.array1中。
我已经阅读了使用angular.copy()
,但是这种行为的原因是什么?
亲切的问候; Force0234
答案 0 :(得分:0)
它与Angular无关,它发生的原因是因为对象和数组在JavaScript中通过引用传递。
您可以使用slice()
来克隆数组。
$scope.array1_copy = $scope.array1[$scope.index].slice();
在此处阅读更多内容:http://orizens.com/wp/topics/javascript-arrays-passing-by-reference-or-by-value/
答案 1 :(得分:0)
在javascript中,当您将对象分配给另一个对象时,传递此对象的引用,角度复制创建一个新对象并复制de primitive值并返回此引用。例如:
var object = {
value: "value",
value2: "value2",
...
}
var object2 = object;
object2.value = "change this value";
console.log(object.value) // must print "change this value"
var value = object.value;
value = "another value";
console.log(object.value) // must print "change this value" mantain the old value
//Deep copy
var object2 = {}
object2.value = object.value;
object2.value2 = object.value2;
object2.value = "another change to this value";
console.log(object.value) // must print "change this value" mantain the old value