因此,我正在使用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/

10-12 07:22
查看更多