2016-08-16 69 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> 

它不是真的像你的變量不會再次更新,但更改將不會顯示在網頁上。