尝试在AngularJS脚本中将一个变量值分配给另一个$ scope变量(或正常变量),之后不修改其中任何一个。但是我看到变量值都会自动更改 - 在上面的赋值之后,对其他一些变量进行了修改。 为什么未修改的变量(“d”和“$ scope.dataset_d_final”)会自动更改? 我该如何预防?
我有以下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.dataset_final={};
$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;
}
d.push(dataset[key]);
$scope.dataset_d_final = d; // THIS IS THE ASSIGNMENT
// "$scope.dataset_d_final" and "d" variables gets changed even after performing no modification later in the code
// REVERSING
var dataset1 = $scope.dataset_v;
var d1 = [];
Object.keys(dataset1).forEach(function (key) {
// Get the value from the object
var value = dataset1[key].value;
// Update values if in the range
if (value == 2) {
dataset1[key].value = 1;
} else if (value == 3) {
dataset1[key].value = 4;
}
d1.push(dataset1[key]);
});
alert('Final');
alert(JSON.stringify($scope.dataset_d_final, null, 4));
alert(JSON.stringify(d, null, 4)); // Both got changed as per above function
});
</script>
我对变量“d”和“$ scope.dataset_d_final”的最后警告不应该改变..我该怎么做?
我想通过$ http服务向服务器发布d或$ scope.dataset_d_final数据。
答案 0 :(得分:0)
当您将一个对象值分配给另一个对象时,两者都获得与对象相同的引用是引用类型
像 var a = {prop1:0,prop2:0},b = {}; //都是对象 a = b; 改变任何一个对象都会在两个方面做出改变
@'
<form method="GET" action="http://localhost/index.php" name="head2">
<input type="hidden" name="akcja" value="szukaj">
...
</form>
'@
为了避免此类问题,您可以使用a.prop1 = 1;
a.prop2 = 2;
console.log("Output: - ",b); // Output: - {prop1: 1, prop2: 2};
,它将通过克隆该对象为该值分配不同的引用。
angular.copy