簡體   English   中英

為什么要使用$ rootScope?

[英]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的變量,然后每個繼承的作用域將獲得自己的副本,該副本可以獨立設置。

注意:

  1. 當您將ng-model與$ rootScope對象一起使用時,AngularJS將在控制器的特定$ scope下而不是在全局級別$ rootScope下更新這些對象。

  2. 當我們擁有服務和工廠之類的東西時,不應使用$ rootScope共享變量。

最后,Angular FAQ在頁面底部這樣說:“相反,不要創建其唯一的目的是存儲和返回數據的服務。” 這里看

實際上,我認為在這種情況下您不應該使用$rootScope ,應該創建一個單獨的服務(或工廠)來存儲您的設置,但是用法和原因是相同的。

為了簡單地存儲值,主要原因是一致性。 模塊和依賴注入是確保您編寫可測試代碼的重要組成部分,並且所有這些都使用依賴注入,因此可以輕松編寫單元測試(可以模擬依賴)。 盡管注入一個簡單的對象並不會帶來很多明顯的好處,但這與訪問更復雜的代碼的方式是一致的,對此有很多話要說。 與此類似,如果要升級設置對象以從服務器獲取數據(例如,針對特定環境的設置),則可能要開始對該功能進行單元測試,而如果不對它進行模塊化,則無法真正完成該功能。

還有一個(坦白地說很弱)的命名空間參數-如果導入的另一個庫使用window.MyApp怎么辦?

TL; DR:強烈建議采用最佳做法。 現在看來似乎有些笨拙,但從長遠來看,您會從中受益。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM