2016-08-16 90 views
0

我正在使用angularjs。我有一些不同的问题。Angularjs +停止更新数据到变量

我有HTTP调用。在HTTP请求之后,响应将被存储在两个不同的变量中。在改变数据后,它会自动变成其他变量。

$http.get('get/list') 
     .success(function(data, status) { 
      $scope.test1 = data; 
      $scope.test2 = data; 
     }) 
     .error(function(data) { 

     }); 

//样品JSON

{ 
    "lists": [ 
     { 
      "_id": "575e6d4bde006e3176bb9dc5", 
      "items": [ 
       { 
        "name": "a" 
       }, { 
        "name": "b" 
       } 
      ], 
      "name": "fridge", 
      "status": "done" 
     } 
    ] 
} 

后,我会推入JSON TEST1变量。

$scope.addRow = function(comment1) { 
      $scope.test1.lists.push({ 
       'name' : 'c' 
      }); 

     }; 

但是,当我打印$ scope.test2它也自动添加新增加的项目。 (name = c)。

任何想法来解决这个问题。我需要打印test2获取HTTP请求的内容。

回答

3

发生这种情况是因为$scope.test1 & $scope.test2都指的是内存中的同一个对象。使用angular.copy创建对象的深层副本。所以,$scope.test1 & $scope.test2将不再是相互

$http.get('get/list') 
    .success(function(data, status) { 
     $scope.test1 = angular.copy(data); 
     $scope.test2 = angular.copy(data); 
    }) 
    .error(function(data) { 

    }); 
0

它的浅拷贝/深复制同样的关系别名。

当您将值存储在$scope.data1$scope.data2中时,您必须进行深层复制。

使用类似这样的东西。

$scope.test1 = angular.copy(data); 
$scope.test2 = angular.copy(data); 

这反而创造一个深拷贝和$scope.data1改变不会影响$scope.data2

0

在HTML的一面,你也可以削减数据视图,并通过把两个“控制器之间的结合: '作为变量的前缀。像这样:

<div>{{::test2}}</div> 

它不是真的像你的变量不会再次更新,但更改将不会显示在网页上。