为什么导入的模块会影响Angular 12中的惰性加载模块?



我正在重组基于星云的项目中的模块结构。我遇到导入的模块行为非常奇怪的情况,我要求你澄清你是否理解Angular模块系统在我的情况下是如何工作的。

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

简化版

AppModule导入有UserData提供商的模块C(CoreModule)AppModule惰性加载需要UserData的模块P(PagesModule)由于延迟加载,没有找到UserData提供程序但是在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中,其他地方都找不到。

所以,当我删除StrangeModule时,奇怪的行为开始发挥作用从AppModule -然后延迟加载的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
...]

StrangeModule.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项目中重复这个结构,一切都如预期的那样工作

相关内容

  • 没有找到相关文章

最新更新