调用 forRoot 时,Angular 延迟加载不起作用

und*_*ned 3 javascript angular

我有一个需要公开提供程序的延迟加载模块,所以我使用了forRoot约定并返回以下代码:

@NgModule({
  imports: [RouterModule.forChild([
    {path: "", component: LazyComponent},
  ])],
  declarations: [LazyComponent],
})
export class LazyModule {
  static forRoot() {
    return {
      ngModule: LazyModule,
      providers: [provider]
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是当我在我的应用程序模块中调用 forRoot 时,延迟加载不再起作用。(我在控制台中没有看到单独的块)

@NgModule({
  declarations: [
    AppComponent,
    HelloComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    LazyModule.forRoot() <======== this stops the lazy load module
  ],
  bootstrap: [AppComponent]
})
export class AppModule {
}
Run Code Online (Sandbox Code Playgroud)

据我所知,它应该只使提供者成为单例,为什么它不起作用?

Jan*_*jas 5

截至目前,不可能forRoot在延迟加载的模块中执行(或任何其他此类配置静态方法)。这里的问题是这样的方法返回一个ModuleWithProviderswhile loadChildren 需要一个NgModuleFactory.


Spl*_*lex 1

LazyModule当您在导入数组中导入 a 时,AppModule它不再是“懒惰”的了。惰性模块只能在专用的RoutingModule.

那么,如果我理解正确的话,您想在 LazyModule 之间共享服务吗?

如果是这样,请LazyModule从SharedModule 中删除AppModule 并创建一个 SharedModule,然后将您想要在 SharedModule 的数组中共享的服务移至providersSharedModule 中。在AppModulewith中导入 SharedModule,在 LazyModules 中forRoot导入SharedModulewithoutforRoot