[英]Importing modules with or without forRoot
包括ng-bootstrap
在内的大多数Angular 2+库都提供应导入的模块。 有时他们有forRoot()
方法,有时没有。
最近,我在使用NgbDatepickerModule.forRoot()
在应用程序的子模块中导入NgbDatepickerModule
引起的bug NgbDatepickerModule.forRoot()
,删除forRoot
解决了该问题。
我猜forRoot
方法只应在导入模块时调用,该模块是应用程序的入口点,并且还具有BrowserModule
? 但是模块可以稍后导入到子模块,我想应该在没有forRoot
调用的情况下forRoot
。
为什么? 是否通过forRoot
创建模块,模块创建有什么区别?
.forFoot()
方法由模块的开发人员手动创建,并且只能在主模块导入中使用一次。 该方法应该返回ModuleWithProviders
,它是:
export interface ModuleWithProviders {
ngModule: Type<any>;
providers?: Provider[];
}
您可以看到在使用NgbDatepickerModule
情况下,它看起来是这样的:
export class NgbDatepickerModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: NgbDatepickerModule,
providers: [
{provide: NgbCalendar, useClass: NgbCalendarGregorian},
{provide: NgbDatepickerI18n, useClass: NgbDatepickerI18nDefault},
{provide: NgbDateParserFormatter, useClass: NgbDateISOParserFormatter}, NgbDatepickerConfig
]
};
}
}
当您还在子模块中使用此方法时,这些提供者将被新实例覆盖,这可能会导致意外行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.