对象分配在此angularjs控制器中不起作用

Object assignment does not work in this angularjs controller

本文关键字:控制器 不起作用 angularjs 分配 对象      更新时间:2023-09-26

在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相同的数据。我做错了什么?

在javascript中,函数中的所有参数都是引用的。因此,当您更改引用时,您不会更改被引用的对象。

在您的情况下,您可以使用不同的方式使用Object.assgin

Object.assign(ChartObj, processedObj);

因为

Object.assign()方法用于将所有可枚举自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

或者传递对象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);

使用

$scope.XXX   

而不是ChartObj,因为

您正在为分配价值

ChartObj

$scope.XXX

不是引用类型