2014-11-14 58 views
0

由於它被多個控制器使用的事實,我已將數據分配給$rootScope.currentCache。在初始加載,這些數據看起來(大約)是這樣的:

{ 
    System: "Foo Bar", 
    StartDateTime: "2014-11-27T12:35:00" 
} 

(忽略格式錯誤,他們是無關的問題)。

以我(刪節)控制器I運行以下:

app.controller("CurrentController", function ($rootScope, $scope) { 
    console.log($rootScope.currentCache); 
    var currentData = $rootScope.currentCache; 
    //processDate() converts StartDateTime into a friendly format 
    currentData = processDate(currentData); 
    console.log($rootScope.currentCache); 
}); 

第一的console.log()輸出的時間爲:

2014-11-27T12:35:00 

然而,第二的console.log()輸出日期爲:

Nov 27th 2014 at 12:35pm 

這讓我困惑,因爲日期處理髮生在單獨的currentData變量。

其他控制器需要原始格式的日期。所以,我的問題是爲什麼會發生這種情況,我該如何阻止它呢?

回答

0

它不是單獨的變量。 currentData和$ rootScope.currentCache都指向真實對象 { System: "Foo Bar", StartDateTime: "2014-11-27T12:35:00" }。 所以當你寫currentData = {pit:'isgood'} - 這隻修改currentData。 當你寫currentData.System ='foo2bar' - 這改變了兩者。 嘗試:

var currentDataDate = $rootScope.currentCache.StartDateTime; 
currentDataDate = processDate(currentDataDate); 
+0

雖然我沒有直接使用這個答案(我的目標是很多比描述的更爲複雜,處理每個單獨的元素就不會是值得的)。然而,兩個變量指向同一個對象的想法告訴我克隆原始對象將是前進的方向。 [本文](http://stackoverflow.com/questions/13287297/duplicate-object-in-javascript)教我如何做到這一點。 – sqdge 2014-11-14 19:32:16