2015-11-30 4 views
1

Я пытаюсь назначить переменную области с переменной javascript в скрипте AngularJS и изменять значение нормальной переменной. Но я вижу, что на основе сделанного изменения в обычной переменной данные переменной Scoped изменяются автоматически. Как можно изменить данные Scoped Variable даже после изменения обычной переменной javascript?Как можно изменить значение переменной с областью в AngularJS

Am с помощью кнопки в HTML-код для вызова Assign()

У меня есть ниже AngularJS код

<script> 
var app = angular.module('ExampleApp', ['ui.plot']); 
app.controller('PlotCtrl', function ($scope) 
{ 
    'use strict'; 
    $scope.sname = "Tttt"; 
    $scope.dataset_v = { 
    "d0": { "id": 0, "name": "Housing", "value": 18 }, 
    "d1": { "id": 1, "name": "Travel", "value": 31.08 }, 
    "d2": { "id": 2, "name": "Restaurant", "value": 64 }, 
    "d3": { "id": 3, "name": "Bank", "value": 3 }, 
    "d4": { "id": 4, "name": "Movies", "value": 10 } 
         }; 

    $scope.assign = function() 
    { 
     var dataset=$scope.dataset_v; 
     // Declare resulting empty array 
     var d = []; 
     // Get object keys and iterate over them 
      Object.keys(dataset).forEach(function (key) 
      { 
      // Get the value from the object 
      var value = dataset[key].value; 
      // Update values if in the range 
      if(value >= 10 && value <= 20) { 
       dataset[key].value = 7; 
      } else if(value > 20 && value <= 40) { 
       dataset[key].value = 8; 
      } 
      // Push the updated(or not) value in the array 
      d.push(dataset[key]); 
    }); 
      alert(JSON.stringify(d, null, 4)); 
}); 
</script> 

После внесения изменений на нормальной Js переменной т.е. набора данных и д ..

$ scope.dataset_v не должен изменяться, поэтому он должен быть оригинальным только как показано ниже, как мы можем это сделать?

$scope.dataset_v = { 
    "d0": { "id": 0, "name": "Housing", "value": 18 }, 
    "d1": { "id": 1, "name": "Travel", "value": 31.08 }, 
    "d2": { "id": 2, "name": "Restaurant", "value": 64 }, 
    "d3": { "id": 3, "name": "Bank", "value": 3 }, 
    "d4": { "id": 4, "name": "Movies", "value": 10 } 

}

Am с помощью обычного переменных JavaScript (набор данных и г) для хранения измененных значений, чтобы размещать их на сервер для хранилища данных (внутренне).

ответ

4

Вы можете использовать angular.copy(). Вместо

var dataset = $scope.dataset_v; 

использования

var dataset = angular.copy($scope.dataset_v); 

тем, что вы сохранить оригинальный dataset_v.

2

Это:

var dataset=$scope.dataset_v; 

Создает новую переменную pinting в сторону того же массива.

Что вам нужно, это новый массив. Вы должны скопировать весь массив и изменить копию:

var dataset = angular.copy($scope.dataset_v); 

angular.copy выполняет глубокую копию, в отличие от прямого присваивания или array.slice которым создает неглубоко копию (новый массив, но одни и те же элементы).

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