我正在创建一个库模块(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 { }