2016-08-16 2 views
0

나는 angularjs로 작업하고 있습니다. 나는 다른 종류의 문제가 있었다.Angularjs + stop으로 데이터를 변수로 업데이트합니다.

HTTP 호출이 있습니다. HTTP 요청 후 응답은 두 개의 다른 변수에 저장됩니다. 변수의 데이터를 변경하면 자동으로 다른 변수로 변경됩니다.

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

     }); 

// 샘플 내가 TEST1 변수로 JSON을 밀어 것입니다 후 JSON

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

.

$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

에 영향을주지 않습니다, 당신은 또한 뷰와 '두 가지를 넣어 컨트롤러 사이에서 데이터 바인딩을 줄일 수 있습니다 : '변수의 접두어로 사용하십시오. 이와 같이 :

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

변수가 다시 업데이트되지는 않지만 웹 페이지에 변경 내용이 표시되지 않습니다.

관련 문제