使用或不使用 forRoot 导入模块

蜻蜓

大多数 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章