2016-08-16 3 views
0

Я работаю с угловыми. У меня был какой-то другой вопрос.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> 

Это не очень нравится ваша переменная не будет обновляться раз, но эти изменения не будут отображаться в веб-страницы.

Смежные вопросы