Ich versuche, ein Opaquetoken in den Anbietern mit einer beobachtbaren setzen. Grund ist, dass ich den Wert über den HTTP-Provider (externe JSON-Datei) lese.Ist es möglich, ein OpaqueToken über ein Observable zu setzen?
Das ist, was ich versuche
{
provide: SOME_OPAQUE_TOKEN,
useFactory: (configService: ConfigService) => {
configService.getPath('campaigns')
.subscribe((res) => {
???
});
},
deps: [ConfigService],
},
So offensichtlich diese nicht funktionieren zu tun, aber ich frage mich, ob es eine Lösung für diese Art von Problem?
Oder wenn es tatsächlich möglich ist, einen Service mit UseFactory zu konstruieren, wo einer Ihrer Parameter asynchron abgerufen wird.
Ist das überhaupt möglich?
Edit: Lösung APP_INITIALIZER mit
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;
}
Sobald wir die appconfig setzen wir können es verwenden, die festlegen OpakToken:
{
provide: BASE_PATH,
useFactory: (configService: ConfigService) => configService.appConfig.basePath, deps: [ConfigService],
},
Sie müssen die Abhängigkeit, bevor die App beheben initialisiert werden. Ich denke, dass [APP_INITIALIZER] (https://stackoverflow.com/search?q=app_initializer) hilft. – estus
Danke @estus, gibt es ein Beispiel, wo dies verwendet wird? – Yodacheese
Es ist noch nicht durch die Referenz abgedeckt. Sie können die Suche verwenden, es gibt eine Menge von beantworteten Fragen zu SO, die APP_INITIALIZER abdecken, z. http://stackoverflow.com/a/38128065/3731501. – estus