【发布时间】:2019-03-10 06:27:32
【问题描述】:
在 angular.under ngModule 中 forRoot() 方法的用途是什么?我们正在使用这个 for Root() 方法,如 RouterModule.forRoot(routes)。我们是否需要将这个 forRoot() 用于导入数组中的所有内容
【问题讨论】:
在 angular.under ngModule 中 forRoot() 方法的用途是什么?我们正在使用这个 for Root() 方法,如 RouterModule.forRoot(routes)。我们是否需要将这个 forRoot() 用于导入数组中的所有内容
【问题讨论】:
任何放置在模块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 并通过添加一堆额外提供的服务来扩展它。这些附加服务只应在应用程序中实例化一次,因为它们具有需要在整个应用程序之间共享的状态。
【讨论】: