4

我的理解是$ rootScope是一種全局變量,它允許它在控制器之間共享。工廠也可以做同樣的事情。那麼,爲什麼不使用工廠呢?什麼時候應該使用$ rootScope,並且應該在什麼時候使用工廠,因爲它們的用途幾乎相同?

回答

4

的AngularJS FAQ已經回答了這個很好here

$ rootScope存在,但它可以在角形式 層次用於邪惡

範圍,從根prototypally繼承範圍在 樹頂部。通常這可以被忽略,因爲大多數視圖都有一個 控制器,因此也是它們自己的範圍。

偶爾會有一些數據要全局化爲 整個應用程序。對於這些,您可以注入$ rootScope並在 上設置值,就像其他任何範圍一樣。由於作用域繼承自根作用域,因此這些值將可用於像ng-show之類的 指令所附的表達式,就像本地$ scope中的值一樣。

當然,全局狀態很糟糕,你應該謹慎使用$ rootScope, 就像你會(希望)用任何語言的全局變量一樣。 特別是,不要將它用於代碼,只用於數據。如果您試圖在上放置一個$ rootScope函數,那麼將其放入 服務中幾乎總是更好,該服務可以在需要的地方注入,並且更容易測試 。

相反,不要創建一個服務,其唯一的目的是在 存儲和返回數據位。

1

提供$ rootScope以查看應用程序中的範圍層次結構。如果您有任務直接修改層次結構(這非常罕見:例如,手動修復由第三方庫或某些全局事件發射器引起的內存泄漏),然後使用$ rootScope。
在所有其他99%的情況下,應該使用服務。
另一種意見可以發現here

1

如果你想存儲一些數據並在路由改變後保存它 - 服務(工廠)是最好的解決方案。如您所說,$rootScope可以做同樣的事情,但它是全球性的,所以有機會打破你的數據。當您需要一些全局事件($rootScope.$broadcast)時,例如用戶登錄/註銷,但不用於數據存儲時,$rootScope非常有用。

相關問題