我正在重组基于星云的项目中的模块结构。我遇到导入的模块行为非常奇怪的情况,我要求你澄清你是否理解Angular模块系统在我的情况下是如何工作的。
============================================================
简化版
AppModule导入有UserData提供商的模块C(CoreModule)AppModule惰性加载需要UserData的模块P(PagesModule)由于延迟加载,没有找到UserData提供程序但是在AppModule中添加导入模块S(StrangeModule)来导入模块C可以解决问题,为什么?AppModule和S模块导入的C模块几乎相等,尽管工作方式不同
============================================================
详细版本
-
AppModule进口CoreModule.forRoot ()所有的服务提供者-许多提供符号,包括UserData令牌。
-
AppModule惰性加载PagesModule对于仪表板,布局,卡片等…组件。PagesModule在UserData服务中有一个依赖
-
还有一些模块,叫它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项目中重复这个结构,一切都如预期的那样工作