javascript - 对象分配在此 AngularJS Controller 中不起作用

标签 javascript angularjs javascript-objects

在我的 angularjs Controller 中,我尝试将一个对象分配给 $scope.XX 对象。由于某种原因,它无法工作。这是 angularjs Controller 内代码的简化版本。

    $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);

因为

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);

关于javascript - 对象分配在此 AngularJS Controller 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36215819/

相关文章:

javascript - AngularJS,添加滚动指令以拾取滚动底部不起作用

javascript - 使用对象而不是 bool 更改应用程序流

javascript - 合并两个对象及其内部的数组

javascript - 检查窗口是否打开并且只打开一个新窗口一次?

javascript - jquery javascript - 将脚本标记添加到 dom 会导致奇怪的行为 - 多次调用方法

javascript - 如何从 tensorflow.js 下载模型和权重

javascript - 如何使用 Angular 表达式创建 id

javascript - Coffeescript 按索引删除数组值

javascript - 优化JS函数按月份过滤数据

JavaScript:如果另一个对象在另一个属性中具有相同的值,则更改对象值