2014-11-22 140 views
1

有兩個控制器。一個控制器會將數據寫入對象&另一個控制器需要讀取它。我可以在我的app.js文件中有一個全局變量,它可以在兩個控制器中使用。我很困惑,爲什麼需要使用服務在控制器之間共享數據? app.js ::::::Angularjs - 在控制器之間共享數據

var msg = 'message init' 
app.controller('readController', function($scope){ 
     $scope.msg = msg 
     console.log(msg) 
}); 
app.controller('writeController', function(){ 
     msg = 'message is written' 
}); 

不中寫控制器進行了更改得到反映到讀控制器?在這種情況下,控制檯必須有'消息被寫入'。

+0

這是一個關於閉包和變量範圍的JavaScript問題。您可以創建子控制器並更新父控制器中的變量,但這不是首選實踐。你可能會覺得它使用服務來分享一個價值但不是它的矯枉過正。控制器之間共享的任何數據都應該在服務中。這使它成爲可測試和可注射的。 – user2808895 2014-11-22 06:16:44

+0

是的,你的代碼「有效」,但它破壞了角度的分離使得它很容易實施。你放棄了自動化的單元測試,沒有相互衝突的變量保護,兩個控制器都比DI執行速度慢,沒有固有的數據更改通知,沒有防止縮小錯誤,調試困難,以及需要更多地列出?那就是說,你可以使用$ scope來共享沒有服務。 – dandavis 2014-11-22 06:34:41

回答

1

您可以讀取/寫入$ rootScope的數據。對於簡單的數據,我認爲你不需要服務。請記住,這可能不是一個好設計。

app.controller('readController', function($scope, $rootScope){ 
    $scope.myMsg = $rootScope.msg; 
    console.log($scope.myMsg); 
}); 

app.controller('writeController', function($rootScope){ 
    $rootScope.msg = 'message is written'; 
}); 
0

我不會建議寫全局變量,然後在控制器之間共享數據。 取而代之的是,您可以與服務和工廠共享數據,這更簡單。

相關問題