簡體   English   中英

為什么導入的模塊會影響Angular 12中的懶加載模塊?

[英]Why imported module influence lazy-loaded module in Angular 12?

我正在重組基於星雲的項目中的模塊結構。 我遇到了導入模塊表現非常奇怪的情況,我請你澄清一下你是否理解 Angular 模塊系統在我的情況下是如何工作的。

================================================ ==========

簡化版

AppModule 導入具有 UserData 提供程序的模塊 C(CoreModule) AppModule 延遲加載需要 UserData UserData 提供程序的模塊 P(PagesModule) 因為延遲加載但是添加到 AppModule 導入模塊 S(StrangeModule) 導入模塊 C 解決了問題,為什么? AppModule 和 S 模塊對 C 模塊的導入幾乎相等,即使工作方式不同

================================================ ==========

詳細版

  1. AppModule使用所有服務提供者導入CoreModule.forRoot() - 許多提供符號,包括UserData令牌。

  2. AppModule 為儀表板、布局、卡片等組件延遲加載PagesModule PagesModule 依賴於 UserData 服務

  3. 還有一些模塊,稱之為StrangeModule ,它也在導入 CoreModule.forRoot(),但現在我正試圖從項目中排除這個模塊。

問題

絕對沒有對 StrangeModule 的依賴(我重復一遍,在 AppModule 之后第二次導入 CoreModule.forRoot())。 如果我搜索 StrangeModule 的代碼——它只在 AppModule 中導入,沒有其他地方。

因此,當我從 AppModule 中刪除StrangeModule時,奇怪的行為開始發揮作用——然后延遲加載的 PagesModule 無法找到 UserData 服務的提供者,我認為這沒問題,因為 PagesModule 是延遲加載的。

但是,如果我在 AppModule 中導入 StrangeModule,為什么會為延遲加載的 PagesModule 解決依賴關系呢?

AppModule.ts

// output shortened
imports: [...,
CoreModule.forRoot(),
ThemeModule.forRoot(),
NbLayoutModule,
StrangeModule, // why importing this resolves UserData 
//dependency for lazy-loaded module while importing CoreModule itself dont
...]

奇怪模塊.ts

@NgModule({
  declarations: [],
  imports: [
    StrangeModuleRoutingModule,
    CoreModule.forRoot(), // remove it and PagesModule also cant resolve UserData
  ],
})
export class StrangeModule {
}

PagesModule.ts

@NgModule({
  imports: [
    PagesRoutingModule,
    ThemeModule,
    NbMenuModule,
    DashboardModule,
    ECommerceModule,
    MiscellaneousModule,
  ],
  declarations: [
    PagesComponent,
  ],
})
export class PagesModule {
}

PagesModule 僅在 app-routing.module.ts 中延遲加載

可能是星雲模塊結構的問題。 因為在延遲加載模塊中我無法訪問 CoreModule.forRoot() 方法中提供的服務。 我試圖在一個干凈的 Angular 項目上重復這個結構,一切都按預期工作

暫無
暫無

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

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