This question already has an answer here:
- How to pass parameters rendered from backend to angular2 bootstrap method 4 answers
I'm trying to set an opaquetoken in the providers using an observable. Reason being is I'm reading the value via the Http provider (external JSON file).
This is what I'm trying to do
{
provide: SOME_OPAQUE_TOKEN,
useFactory: (configService: ConfigService) => {
configService.getPath('campaigns')
.subscribe((res) => {
???
});
},
deps: [ConfigService],
},
So obviously this wont work but I'm wondering if there is a solution for this sort of problem?
Or if its actually possible to construct a service using useFactory where one of your parameters is retrieved asynchronously.
Is it possible at all?
Edit: Solution using APP_INITIALIZER
In AppModule:
{
provide: APP_INITIALIZER,
useFactory: (configService: ConfigService) => () => configService.load(),
multi: true,
deps: [ConfigService, Http],
},
In ConfigService load():
public load(): Promise<Configuration> {
let promise =
this.http
.get('config.json')
.map(m => m.json())
.toPromise();
promise
.then(config => this.appConfig = config);
return promise;
}
Once we set the appConfig we can use it to set the OpaqueToken:
{
provide: BASE_PATH,
useFactory: (configService: ConfigService) => configService.appConfig.basePath, deps: [ConfigService],
},