簡體   English   中英

Angular 2進樣器層次結構和NgModule

[英]Angular 2 injector hierarchy and NgModule

我不知道NgModule實際上如何影響Angular 2注入器層次結構。

在具有嵌套模塊的應用程序中,層次結構是什么樣的? 它是否為每個模塊創建一個新的注射器實例,還是可以訪問頂級注射器(類似於Angular 1.x模塊)?

在大型應用程序中弄清楚這棵樹可能有些令人困惑。

有沒有一種方法可以打印出,檢查或直觀地查看注射器的層次結構(就像可以在Angular 1.x中對作用域層次結構進行操作一樣)?

根據模塊文檔: https : //angular.io/docs/ts/latest/guide/ngmodule.html

Angular將這些提供程序注冊到模塊執行上下文的根注入器中。 這是應用程序啟動時加載的所有模塊的應用程序的根注入器。

Angular可以將這些提供程序服務之一注入到應用程序的任何組件中。 如果此模塊提供了HeroService,或者啟動時加載的任何模塊都提供了HeroService,則Angular可以將相同的HeroService實例注入任何應用程序組件中。

延遲加載的模塊具有自己的子根注入器,它通常是應用程序根注入器的直接子代。

延遲加載的服務僅限於延遲模塊的注入器。 如果延遲加載的模塊還提供HeroService,則在該模塊的上下文中創建的任何組件(例如,通過路由器導航)都將獲取服務的本地實例,而不是根應用程序注入器中的實例。

外部模塊中的組件繼續接收為應用程序根目錄創建的實例。

因此,您有一個在所有模塊之間共享的注射器。 但是,延遲加載的組件將具有子注入器

您應該能夠在瀏覽器控制台中使用ng.probe($0)調查提供程序。 另請參閱https://stackoverflow.com/a/35233711/217408

您可以使用MyModule.forRoot()加載模塊(另請參見https://angular.io/docs/ts/latest/guide/ngmodule.html#!#providers ),以在根級別添加提供程序。

如果您在模塊中提供它,那么該模塊中的組件可以使用它。 我還沒有看到它提到模塊明確地引入了子注入器,但是在我看來這確實是必須的。

暫無
暫無

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

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