我認爲你正在尋找https://angular.io/docs/ts/latest/cookbook/ngmodule-faq.html#!#q-module-provider-visibility
爲什麼一個功能模塊,隨處可見中提供的服務? 引導程序模塊 的@ NgModule.providers中列出的提供程序具有應用程序範圍。添加一個服務提供商 @ NgModule.providers有效地發佈服務於整個 應用。
當我們導入模塊時,Angular將模塊的服務提供商 (其提供程序列表的內容)添加到應用程序根注入器。
這使得供應商在 知道供應商的查詢令牌的應用程序的每個類可見。
這是由設計。通過模塊導入實現的擴展性是Angular模塊系統的主要目標 。合併模塊供應商到 應用注射器,很容易讓一個模塊庫,充實新的服務 整個應用程序。通過添加一次HttpModule,每個應用程序組件都可以發出http請求。
但是,如果您期待 模塊的服務僅對 聲明的特徵模塊可見的組件可見,這會感覺不受歡迎的驚喜。如果HeroModule提供HeroService和 根的AppModule進口HeroModule,雖然知道 HeroService類型可以注入在HeroModule宣稱的服務,而不僅僅是類 任何類。
模塊的提供者添加到根的範圍。丟棄重複項。這意味着提供程序可以從整個應用程序中找到,除非它們在組件或延遲加載的模塊上被重寫。延遲加載的模塊獲取它們自己的根作用域。
如果紅色模塊被延遲加載,那麼組件3將從該模塊獲取提供程序,如果它急於加載,則將紅色模塊的提供程序添加到應用程序的根作用域,組件3將從那裏獲取它。這是所有與由添加到@Component()
或@Directive()
@NgModule()
提供商添加並不提升到任何根範圍提供商。 DI從對其父代及其父代有依賴關係的組件中查找,對於提供者以及最後在應用程序的根作用域中或在延遲加載模塊的根作用域中查找(如果組件是一個組件的一部分) 。
你可以使用augury來檢查你的依賴關係圖。 – Manish
@ user32,謝謝,我會看看 –