因此,我正在使用AngularJS开发一个项目,在该项目中,我需要能够将范围内的对象的值与其之前记录的值进行比较。我正在通过以下算法来做到这一点:
function() {
var data = [
{ id: 1, key: 'value', foo: 'bar'},
{ id: 2, key: 'value', foo: 'bar'}
]
$scope.oldTarget = data[0];
$scope.target = data[0];
}
现在,如果我要这样做:
function() {
$scope.target.foo = 'fighters';
if ($scope.target != $scope.oldTarget) console.log('Target was modified');
console.log($scope.target);
console.log($scope.oldTarget);
}
它将输出:
{ id: 1, key: 'value', foo: 'fighters'}
{ id: 1, key: 'value', foo: 'fighters'}
我的假设是AngularJS会自动将两个变量target和oldTarget绑定在一起,并将对目标所做的所有更改镜像到oldTarget。是这种情况,如果是这样,我有什么办法可以防止这种情况发生?如果没有,那我在做什么呢?
最佳答案
这与Angular无关,它是JavaScript的默认行为。您引用的是同一对象。如果打算在不更改源的情况下对其进行修改,则需要克隆该对象。
看一看:
What is the most efficient way to clone an object?
Most elegant way to clone a JavaScript object
关于javascript - Angular 无意绑定(bind)/对象镜像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27128873/