Настройте внешнюю библиотеку Angular с помощью .forRoot(), которая зависит от основной службы приложения для заполнения значений конфигурации.
У меня есть настраиваемая библиотека, для которой требуется настраиваемая конфигурация в модуле библиотеки forRoot (), но мне нужно использовать модуль конфигурации приложения, который загружает эту конфигурацию асинхронно, вместо использования статических введенных данных, как показано ниже.
// Custom Library module
@NgModule({})
export class FormatModule {
constructor() {}
public static forRoot(config: FormatConfig) {
// Do something with the config
}
}
где FormatConfig следующий:
export interface FormatConfig {
[key: string]: any
}
Использование этого модуля в основном AppModule:
export function loadConfig(configService): Observable<FormatConfig> {
return configService.extractFormatConfig();
}
@NgModule({
declarations: [
AppComponent
],
imports: [
FormatModule.forRoot(),
BrowserModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
У меня также есть токен инъекции для назначения данных конфигурации:
export const FORMAT_CONFIG = new InjectionToken<string>('FORMAT_CONFIG');
Можно использовать метод forRoot и фабрику для заполнения данных, которые нужны модулю. Я не буду вводить ConfigService внутри FormatModule, потому что это сделает FormatModule зависимым от другой внешней службы.
1 ответ
определить токен инъекции
export const FORMAT_CONFIG: InjectionToken<FormatConfig> = new InjectionToken<FormatConfig>('FORMAT_CONFIG');
используйте свою фабрику при объявлении AppModule
export function loadConfig(configService: ConfigService): Observable<FormatConfig> {
return configService.extractFormatConfig();
}
@NgModule({
declarations: [
AppComponent
],
imports: [
FormatModule.forRoot(),
BrowserModule,
],
providers: [{
provide: FORMAT_CONFIG,
useFactory: loadConfig,
deps: [ConfigService]
}],
bootstrap: [AppComponent]
})
export class AppModule { }
теперь вы можете вставить свою конфигурацию в свой
FormatModule
как следующее
...
constructor(@Inject(FORMAT_CONFIG) private formatConfig: FormatConfig)