簡體   English   中英

訪問 Angular 懶加載模塊中的根服務

[英]Access root services in Angular lazy loaded module

我正在使用 Angular 延遲加載模塊,並希望在延遲加載模塊中訪問根服務說AuthService 我想訪問延遲加載模塊中根注入器中存在的 singleton 實例。

我正在關注https://angular.io/guide/providers並且有兩個語句導致混淆:

當您將服務提供者添加到根應用程序注入器時,它在整個應用程序中都可用。

當 Angular 路由器延遲加載模塊時,它會創建一個新的注入器。 此注入器是根應用程序注入器的子代。 想象一棵注射器樹; 每個延遲加載的模塊都有一個根注入器,然后是一個子注入器。 路由器將根注入器中的所有提供程序添加到子注入器。 當路由器在延遲加載上下文中創建組件時,Angular 更喜歡從這些提供程序創建的服務實例,而不是應用程序根注入器的服務實例。

第一條語句清楚地表明我可以在應用程序的任何位置訪問根服務。 而第二個是說延遲加載的模塊將獲得自己的注入器,並可能擁有自己的服務實例?

那么這是否有可能在延遲加載的模塊中獲取服務的 singleton 實例?

如果您在整個應用程序中只尋找一個實例,您可以指定

@Injectable({
   providedIn: 'root',
})

此行為也可以通過在 app 模塊src/app/app.module.ts (providers) 中指定來覆蓋

@Injectable()裝飾器標識服務 class。 providedIn屬性配置了一個特定的ModuleInjector ,這里是root ,這使得服務在root ModuleInjector中可用。

延遲加載其他@NgModules ModuleInjectors

參考鏈接

暫無
暫無

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

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