我试图将范围变量分配给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)来存储修改后的值,以便将它们发布到服务器以进行数据存储(内部)。
答案 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>