繁体   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