2016-03-25 43 views
0

在我的angularjs控制器中,我嘗試將一個對象分配給$ scope.XX對象。出於某種原因,它無法工作。這裏是angularjs控制器內部代碼的簡化版本。對象分配不能在這個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相同的數據。我做錯了什麼?

回答

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

精彩。我希望我能給你更多的觀點。精彩!!!你花了幾個小時,而你花了幾分鐘。你是個天才!! – user781486

+1

@ user16891328,在閱讀功能文檔時更加細心:-) – Grundy

1

使用

$scope.XXX 

因爲

,而不是你的ChartObj是

ChartObj 

$scope.XXX 

分配值不是refrence型