I have a custom Library that needs custom configuration within the forRoot() Library module, but I need to use an App Config Module that loads that configuration asynchronously instead of using static injected data as following.
// Custom Library module
@NgModule({})
export class FormatModule {
constructor() {}
public static forRoot(config: FormatConfig) {
// Do something with the config
}
}
where FormatConfig is the following:
export interface FormatConfig {
[key: string]: any
}
Usage of that module within the main AppModule:
export function loadConfig(configService): Observable<FormatConfig> {
return configService.extractFormatConfig();
}
@NgModule({
declarations: [
AppComponent
],
imports: [
FormatModule.forRoot(),
BrowserModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
I also have an Injection Token to assign the config data:
export const FORMAT_CONFIG = new InjectionToken<string>('FORMAT_CONFIG');
Is possible to use the forRoot method and a factory to populate the data which the module needs. I won’t inject the ConfigService inside the FormatModule, because that would make the FormatModule dependant of another external service.
define injection token
use your factory when declaring the AppModule
now you can inject your config inside your
FormatModule
like the following...