大多数 Angular 2+ 库包括ng-bootstrap
提供应导入的模块。有时他们有forRoot()
方法,有时没有。
最近我正在努力解决由于NgbDatepickerModule
在我的应用程序的子模块中导入 a 导致的错误NgbDatepickerModule.forRoot()
...,删除forRoot
解决了这个问题。
我猜forRoot
方法应该只在导入模块时调用,该模块是应用程序的入口点并且还有BrowserModule
? 但是模块可以稍后导入到子模块中,我想这应该在没有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
]
};
}
}
当您也在子模块中使用此方法时,这些提供程序会被新实例覆盖,这可能会导致意外行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句