2016-08-16 2 views
0

私はangularjsを使っています。私はいくつかの異なる種類の問題を抱えていました。Angularjs + stopでデータを変数に更新する

私はHTTPコールを持っています。 HTTP要求後、応答は2つの異なる変数に格納されます。変数のデータを変更すると、自動的に他の変数にも変更されます。

$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" 
     } 
    ] 
} 

私はtest1の変数にJSONをプッシュします後。

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

     }; 

しかし、$ scope.test2を印刷すると、自動的に新しい追加項目も追加されました。 (名前= c)。

この問題を解決するためのあらゆるアイデア。私はHTTPリクエストで何が得られるのかをtest2で表示する必要があります。

答えて

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に変更するとHTML側で$scope.data2

0

に影響を与えません、あなたはまた、2「を置くことによって、ビューとコントローラ間のデータバインディングを切ることができます。 'を変数の接頭辞として使用します。このように:

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

変数は再び更新されないようですが、変更はウェブページに表示されません。

関連する問題