我们如何在AngularJS中更改范围变量的值

时间:2015-11-30 11:32:45

标签: javascript angularjs

我试图将范围变量分配给AngularJS脚本中的普通javascript变量,并修改普通变量的值。但我看到,根据正常变量中的变化,Scoped变量数据会自动更改。即使修改了普通的javascript变量,我们如何才能更改Scoped Variable的数据呢?

使用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变量上进行更改后,即数据集和d ..

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

}

使用普通的javascript变量(数据集和d)来存储修改后的值,以便将它们发布到服务器以进行数据存储(内部)。

2 个答案:

答案 0 :(得分:4)

您可以使用angular.copy()。而不是

var dataset = $scope.dataset_v;

使用

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

由此保留原始dataset_v

答案 1 :(得分:2)

这:

var dataset=$scope.dataset_v;

创建一个针对同一阵列的新变量。

您需要的是一个新阵列。您应该复制整个阵列并修改副本:

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

angular.copy执行副本,与直接分配不同,或array.slice创建副本(新数组但相同的元素)。< / p>