为什么当从另一个对象复制对象时,Angular不会数据绑定数据?

Mar*_*ijn 7 javascript angularjs

我创建了一个简单的jsfiddle来说明我的问题:

小提琴

HTML:

<div ng-controller="MyCtrl">   
    <div ng-repeat="p in products">
        <span ng-click="overwrite(p)">{{ p.id }}: {{ p.name }}</span>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {

    var products = [{id:1, name:'first'}, {id:2, name:'second'}];
    $scope.products = products;

    var prod = {id: 3, name:'third'};

    $scope.overwrite = function(p){
        p.id = 4;
        p.name = 'forth';

        p = prod; // this doesn't work nor does angular.copy(prod)
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,当我手动设置属性时,值是bind.但是当我覆盖一个对象时,没有任何反应.这怎么可能?当我想要恢复其原始状态的对象时,我该怎么办?

想象一下,我使用创建备份对象var productBackup = angular.copy(product).然后我对原始产品进行了更改,之后我决定取消更改.我想用这个来做product = productBackup.但这不起作用!在这种情况下,我是否需要像这样手动设置所有属性?

product.id = productBackup.id;
product.name = productBackup.name;
etc...
Run Code Online (Sandbox Code Playgroud)

Mar*_*man 23

如果使用angular.copy(source, destination)你就能达到效果.

更新小提琴

发生的事情是,p即使你完成任务,角度仍在观看原始参考.如果您使用angular.copy()您是从复制值prodp哪个角度正确地看.

我问了一个类似的问题,但它在共享服务中处理了这个问题.