在我的模块的 forRoot 方法中初始化另一个模块



我正在创建一个库模块(AuthModule(,它依赖于第三方模块(AngularFire的AngularFireModule(。我的库(AuthModule(将在其他一些应用程序中使用。

问题是,为了能够导入AngularFire,我必须通过一些配置传递给它,如下所示:

@NgModule({
    declarations: [ ... ],
    imports: [
        AngularFireModule.initializeApp(enviroment.firebaseOptions)
    ],
    providers: [...],
    exports: []
})
export class AuthModule { }

问题是我不想对库中的选项/配置进行硬编码,因为这些选项/配置会根据使用它的应用程序而有所不同。

我正在考虑在我的模块中使用forRoot方法,以便它接收配置作为参数,然后使用它来初始化第三方模块(AngularFireModule(。

但是是否可以在 forRoot 方法中导入另一个模块?如何?

谢谢!

您可以使用 Angular 的 forRoot 方法并在那里初始化 AngularFireModule(这是针对旧版本的 Firebase SDK,如问题中使用的,较新版本具有不同的语法(。

身份验证模块:

...
@NgModule({
  // do not initialize AngularFireModule here
  imports: [AngularFireModule, ...],
  declarations: [...],
  exports: [AngularFireModule, ...],
  providers: [...]
})
export class AuthModule {
   static forRoot(firebaseOptions: any): ModuleWithProviders<AuthModule> {
   [...]
   // initialize AngularFireModule here
   AngularFireModule.initializeApp(firebaseOptions)
  return {
    ngModule: AuthModule,
    providers: [...]
  };
 }
 static forFeature(): Type<AuthModule> {
   return AuthModule;
 }

}

应用模块:

@NgModule({
declarations: [ ... ],
imports: [
    // your module here with the firebase info
    AuthModule.forRoot(enviroment.firebaseOptions)
],
providers: [...],
exports: []
})
export class AppModule { }

最新更新