[英]Why would you ever use the $rootScope?
基本上當我有這個
MyApp = MyApp || {};
MyApp.settings = {
isFooEnabled: false
}
如果我使用rootscope並要檢查isFooEnabled
,則必須將rootScope注入要執行檢查的任何對象中。
這有什么意義?
與使用直接的標准javascript MyApp.isFooEnabled
相比,使用$rootScope.isFooEnabled
有什么優勢?
有什么好處呢?
我什么時候應該使用另一個?
$ rootScope是最高級的范圍。 一個應用程序只能有一個$ rootScope,它將在該應用程序的所有組件之間共享。 因此,它就像一個全局變量。 所有其他$ scope是$ rootScope的子級。
在模塊初始化時,將設置rootScope的變量,然后每個繼承的作用域將獲得自己的副本,該副本可以獨立設置。
注意:
當您將ng-model與$ rootScope對象一起使用時,AngularJS將在控制器的特定$ scope下而不是在全局級別$ rootScope下更新這些對象。
當我們擁有服務和工廠之類的東西時,不應使用$ rootScope共享變量。
最后,Angular FAQ在頁面底部這樣說:“相反,不要創建其唯一的目的是存儲和返回數據的服務。” 從這里看 。
實際上,我認為在這種情況下您不應該使用$rootScope
,應該創建一個單獨的服務(或工廠)來存儲您的設置,但是用法和原因是相同的。
為了簡單地存儲值,主要原因是一致性。 模塊和依賴注入是確保您編寫可測試代碼的重要組成部分,並且所有這些都使用依賴注入,因此可以輕松編寫單元測試(可以模擬依賴)。 盡管注入一個簡單的對象並不會帶來很多明顯的好處,但這與訪問更復雜的代碼的方式是一致的,對此有很多話要說。 與此類似,如果要升級設置對象以從服務器獲取數據(例如,針對特定環境的設置),則可能要開始對該功能進行單元測試,而如果不對它進行模塊化,則無法真正完成該功能。
還有一個(坦白地說很弱)的命名空間參數-如果導入的另一個庫使用window.MyApp
怎么辦?
TL; DR:強烈建議采用最佳做法。 現在看來似乎有些笨拙,但從長遠來看,您會從中受益。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.