【问题标题】:Object assignment does not work in this angularjs controller对象分配在这个 angularjs 控制器中不起作用
【发布时间】:2016-03-25 07:32:56
【问题描述】:

在我的 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 angularjs javascript-objects


    【解决方案1】:

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

    【讨论】:

    • 太棒了。我希望我能给你更多的分数。精彩的!!!我花了几个小时,而你花了几分钟。你真是个天才!!
    • @user16891328,请在阅读该函数的文档时更加专心 :-)
    【解决方案2】:

    使用

    $scope.XXX   
    

    而不是 ChartObj 因为

    你的价值分配给

    ChartObj
    

    $scope.XXX
    

    不是引用类型

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      相关资源
      最近更新 更多