对象分配在此 angularjs 控制器中不起作用
Object assignment does not work in this angularjs controller
在我的 angularjs 控制器中,我尝试将一个对象分配给 $scope.XX 对象。由于某种原因,它无法工作。这是 angularjs 控制器中代码的简化版本。
$scope.XXX = {};
polling_interval_ms = 100;
var poll = function (ChartObj, polling_interval_ms) {
var processedObj = {};
processedObj = processDataChart(data_Chart); //data_Chart is object that contains data that changes in real-time
ChartObj = Object.assign(processedObj);
console.log(ChartObj);
$timeout(function () {
poll(ChartObj, polling_interval_ms)
}, polling_interval_ms);
};
poll($scope.XXX, polling_interval_ms);
console.log($scope.XXX);
奇怪的是 console.log(ChartObj);
的输出显示数据已分配给对象。但是,console.log($scope.XXX)
的输出为空。我期望 $scope.XXX
包含与 ChartObj
相同的数据。我做错了什么?
使用
$scope.XXX
而不是 ChartObj 因为
您正在为
赋值
ChartObj
和
$scope.XXX
不是引用类型
在javascript函数中的所有参数都是引用。因此,当您更改引用时 - 您 而不是 更改引用的对象。
在您的情况下,您可以以稍微不同的方式使用 Object.assgin
Object.assign(ChartObj, processedObj);
因为
The Object.assign() method is used to copy the values of all enumerable own properties from one or more source objects to a target object. It will return the target object.
或者传递对象 XXX 的包装器,在本例中它是 $scope
$scope.ChartObj = {};
polling_interval_ms = 100;
var poll = function (wrapper, polling_interval_ms) {
var processedObj = {};
processedObj = processDataChart(data_Chart); //data_Chart is object that contains data that changes in real-time
wrapper.ChartObj = Object.assign(processedObj);
console.log(wrapper.ChartObj);
$timeout(function () {
poll(wrapper, polling_interval_ms)
}, polling_interval_ms);
};
poll($scope, polling_interval_ms);
console.log($scope.ChartObj);
在我的 angularjs 控制器中,我尝试将一个对象分配给 $scope.XX 对象。由于某种原因,它无法工作。这是 angularjs 控制器中代码的简化版本。
$scope.XXX = {};
polling_interval_ms = 100;
var poll = function (ChartObj, polling_interval_ms) {
var processedObj = {};
processedObj = processDataChart(data_Chart); //data_Chart is object that contains data that changes in real-time
ChartObj = Object.assign(processedObj);
console.log(ChartObj);
$timeout(function () {
poll(ChartObj, polling_interval_ms)
}, polling_interval_ms);
};
poll($scope.XXX, polling_interval_ms);
console.log($scope.XXX);
奇怪的是 console.log(ChartObj);
的输出显示数据已分配给对象。但是,console.log($scope.XXX)
的输出为空。我期望 $scope.XXX
包含与 ChartObj
相同的数据。我做错了什么?
使用
$scope.XXX
而不是 ChartObj 因为
您正在为
赋值ChartObj
和
$scope.XXX
不是引用类型
在javascript函数中的所有参数都是引用。因此,当您更改引用时 - 您 而不是 更改引用的对象。
在您的情况下,您可以以稍微不同的方式使用 Object.assgin
Object.assign(ChartObj, processedObj);
因为
The Object.assign() method is used to copy the values of all enumerable own properties from one or more source objects to a target object. It will return the target object.
或者传递对象 XXX 的包装器,在本例中它是 $scope
$scope.ChartObj = {};
polling_interval_ms = 100;
var poll = function (wrapper, polling_interval_ms) {
var processedObj = {};
processedObj = processDataChart(data_Chart); //data_Chart is object that contains data that changes in real-time
wrapper.ChartObj = Object.assign(processedObj);
console.log(wrapper.ChartObj);
$timeout(function () {
poll(wrapper, polling_interval_ms)
}, polling_interval_ms);
};
poll($scope, polling_interval_ms);
console.log($scope.ChartObj);