我的理解是$ rootScope是一種全局變量,它允許它在控制器之間共享。工廠也可以做同樣的事情。那麼,爲什麼不使用工廠呢?什麼時候應該使用$ rootScope,並且應該在什麼時候使用工廠,因爲它們的用途幾乎相同?
4
A
回答
4
的AngularJS FAQ已經回答了這個很好here:
$ rootScope存在,但它可以在角形式 層次用於邪惡
範圍,從根prototypally繼承範圍在 樹頂部。通常這可以被忽略,因爲大多數視圖都有一個 控制器,因此也是它們自己的範圍。
偶爾會有一些數據要全局化爲 整個應用程序。對於這些,您可以注入$ rootScope並在 上設置值,就像其他任何範圍一樣。由於作用域繼承自根作用域,因此這些值將可用於像ng-show之類的 指令所附的表達式,就像本地$ scope中的值一樣。
當然,全局狀態很糟糕,你應該謹慎使用$ rootScope, 就像你會(希望)用任何語言的全局變量一樣。 特別是,不要將它用於代碼,只用於數據。如果您試圖在上放置一個$ rootScope函數,那麼將其放入 服務中幾乎總是更好,該服務可以在需要的地方注入,並且更容易測試 。
相反,不要創建一個服務,其唯一的目的是在 存儲和返回數據位。
1
提供$ rootScope以查看應用程序中的範圍層次結構。如果您有任務直接修改層次結構(這非常罕見:例如,手動修復由第三方庫或某些全局事件發射器引起的內存泄漏),然後使用$ rootScope。
在所有其他99%的情況下,應該使用服務。
另一種意見可以發現here。
1
如果你想存儲一些數據並在路由改變後保存它 - 服務(工廠)是最好的解決方案。如您所說,$rootScope
可以做同樣的事情,但它是全球性的,所以有機會打破你的數據。當您需要一些全局事件($rootScope.$broadcast
)時,例如用戶登錄/註銷,但不用於數據存儲時,$rootScope
非常有用。
相關問題
- 1. Angularjs使用工廠在控制器之間共享數據
- 2. 從$ rootScope $ watch函數在控制器之間共享數據
- 3. 爲什麼在數據集做同樣的事情時使用數據表?
- 4. AngularJS共享使用$ rootScope的工廠,然後丟棄$ rootScope
- 5. 使用工廠共享控制器之間的信息
- 6. 爲什麼在控制器間共享數據在AngularJS中不起作用
- 7. angularjs兩個控制器共享工廠
- 8. AngularJS跨模塊在工廠和控制器之間共享數據
- 9. 爲什麼我的服務不在控制器之間共享數據?
- 10. 在不同頁面的控制器之間共享數據。角
- 11. AngularJS,在控制器之間共享數據
- 12. 在控制器之間共享數據AngularJS
- 13. 使用承諾在控制器之間共享數據?
- 14. Angularjs:在控制器之間共享可觀察數據
- 15. angularjs工廠數據共享
- 16. 在控制器之間共享數據並等待退貨
- 17. 爲什麼repe和repne在movsb之前做同樣的事情?
- 18. 使用相同的控制器在兩個div之間共享數據
- 19. 使用ngResource在幾個控制器之間共享相同的數據
- 20. 在AngularJS的控制器之間共享數據
- 21. UI路由器,工廠共享數據
- 22. 無法在首次更改後使用工廠的控制器之間共享數據
- 23. 什麼樣的事情適合做Route.activate
- 24. 工廠在控制器中使用時不保留數據
- 25. 爲什麼array_slice()和array_splice()做同樣的事情?
- 26. 爲什麼Y和yy做同樣的事情?
- 27. Rails:控制器之間共享參數
- 28. iOS在視圖控制器之間共享數據
- 29. 以角度在不同控制器之間共享狀態
- 30. 如何獲得應用程序可以做同樣的事情?