有兩個控制器。一個控制器會將數據寫入對象&另一個控制器需要讀取它。我可以在我的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'
});
不中寫控制器進行了更改得到反映到讀控制器?在這種情況下,控制檯必須有'消息被寫入'。
這是一個關於閉包和變量範圍的JavaScript問題。您可以創建子控制器並更新父控制器中的變量,但這不是首選實踐。你可能會覺得它使用服務來分享一個價值但不是它的矯枉過正。控制器之間共享的任何數據都應該在服務中。這使它成爲可測試和可注射的。 – user2808895 2014-11-22 06:16:44
是的,你的代碼「有效」,但它破壞了角度的分離使得它很容易實施。你放棄了自動化的單元測試,沒有相互衝突的變量保護,兩個控制器都比DI執行速度慢,沒有固有的數據更改通知,沒有防止縮小錯誤,調試困難,以及需要更多地列出?那就是說,你可以使用$ scope來共享沒有服務。 – dandavis 2014-11-22 06:34:41