angular中使用了forRoot()方法。在ngModule下,我们将其用于Root()方法,例如RouterModule.forRoot(routes)。是否需要对所有导入数组中使用的forRoot()使用此forRoot()方法?
答案 0 :(得分:0)
放置在模块providers
数组中的所有内容都将成为一个单例实例,该实例可在整个应用程序中使用。有些模块既需要由应用程序使用(应该创建单例),也需要同时由内部非应用程序模块使用(不应该创建单例,但是可能仍需要依赖于不是单例的声明/导出)。 forRoot
背后的想法是创建单例,因此您只想在“根”模块中使用一次。
以下是当前来源的定义:
static forRoot(routes: Routes, config?: ExtraOptions): ModuleWithProviders<RouterModule> {
return {
ngModule: RouterModule,
providers: [
ROUTER_PROVIDERS,
provideRoutes(routes),
{
provide: ROUTER_FORROOT_GUARD,
useFactory: provideForRootGuard,
deps: [[Router, new Optional(), new SkipSelf()]]
},
{provide: ROUTER_CONFIGURATION, useValue: config ? config : {}},
{
provide: LocationStrategy,
useFactory: provideLocationStrategy,
deps: [
PlatformLocation, [new Inject(APP_BASE_HREF), new Optional()], ROUTER_CONFIGURATION
]
},
{
provide: RouterScroller,
useFactory: createRouterScroller,
deps: [Router, ViewportScroller, ROUTER_CONFIGURATION]
},
{
provide: PreloadingStrategy,
useExisting: config && config.preloadingStrategy ? config.preloadingStrategy :
NoPreloading
},
{provide: NgProbeToken, multi: true, useFactory: routerNgProbeToken},
provideRouterInitializer(),
],
};
}
它的作用是RouterModule
,并通过添加一堆其他提供的服务来扩展它。这些附加服务仅应在应用程序中实例化一次,因为它们的状态需要在整个应用程序之间共享。