angularjs对象更改会影响其他对象

时间:2014-08-27 06:39:06

标签: angularjs

我有AngularJS应用程序。从服务器我得到一个JSON。我正在分配两个对象。一个我在我的表单页面中使用来编辑。当用户按提交时,我想检查新值和旧值是否相同。但每当我更新表单中的值并进行检查时,另一个对象值也会更新。导致两个对象始终相同。

Here is the JSFiddle Demo。每当我尝试更改值时,另一个值也会更新。

防止其他对象不改变的解决方案是什么?

HTML

<div ng-app>
  <h2>Form</h2>
  <div ng-controller="MainCtrl">
    <form name="myForm" ng-submit="saveForm()">
      <input type="text" ng-model="obj.name">
          <input type="text" ng-model="obj.value">
      <input class="btn-primary" type="submit" value="Save" ng-disabled="myForm.$pristine">
    </form>
  </div>
</div>

JS

function MainCtrl($scope) {
    $scope.obj={
        name:"N1",
        value:"val"};

    var oldObj = $scope.obj;

    $scope.saveForm=function() {
        alert(JSON.stringify($scope.obj));
        alert(JSON.stringify(oldObj));
        if($scope.obj===oldObj){
            alert("same");
         } else {
            alert("not same");
         }            
    }
}

3 个答案:

答案 0 :(得分:1)

问题是,您只需将参考存储到oldObj。 因此oldObj$scope.obj始终相同。

您需要复制它。

检查小提琴:http://jsfiddle.net/fc0jo1so/1/

我用fromJson,toJson

做到了

答案 1 :(得分:0)

尝试使用jQuery进行深层复制

var oldObj = jQuery.extend(true, {}, $scope.obj);

答案 2 :(得分:0)

您只需更改此行

即可

var oldObj = angular.copy($ scope.obj);

尝试它会起作用。 &安培;警惕不一样