Salve a tutti, è tutto il giorno che sbatto la testa su questo argomento, trovando solo soluzioni (online) ormai deprecate.
Io ho il mio app.module.ts:
ed i due service che dovrebbero essere concatenati. Il primo contiene i metodi per leggere il file di configurazione e il metodo per richiamare una seconda configurazione dal server:codice:[... tutti gli import...] function loadConfigFactory(configService: AppConfigService) { return () =>configService.loadJSON(); } export function initApp(configService: AppConfigService) { return () =>configService.loadConfigurazione(); } @NgModule({ declarations: [ AppComponent, FooterComponent, HeaderComponent, // ToastComponent ], imports: [ BrowserModule, HttpClientModule, NgbModule, FontAwesomeModule, BrowserAnimationsModule, ToastrModule.forRoot() ], providers: [ AppConfigService, { provide:APP_INITIALIZER, useFactory: loadConfigFactory, deps: [AppConfigService], multi:true }, { provide:APP_INITIALIZER, useFactory: initApp, deps: [AppConfigService], multi:true }, { provide:HTTP_INTERCEPTORS, useClass: GestoreIntercept, multi:true }, ], bootstrap: [AppComponent] }) export class AppModule { } function next(next:any, arg1: (el:any) =>void) { throw newError('Function not implemented.'); }
SEGUE...codice:[... tutti gli import...] @Injectable({ providedIn:'root' }) export class AppConfigService { static settings: IAppConfig; static configurazione: Configurazione; private api: ApiService; public constructor(private http: HttpClient, api: ApiService) { this.api=api } loadJSON() { console.log("loadJSON"); const jsonFile='assets/config/appConfig.json'; return new Observable((subscriber) => { this.http.get(jsonFile).subscribe({ //success next: (resp) => { console.log("passo2"); AppConfigService.settings= <IAppConfig>resp; subscriber.complete(); }, // errore error: (err) => { // gestisci errore console.log(err); subscriber.error(); } }); }) } loadConfigurazione() { return newObservable((subscriber) => { this.api.getConfigurazioni().subscribe({ //success next: (resp) => { console.log("passo3"); let arrConf=newMap<string, string|number|boolean>(); resp.data.forEach((element: { chiave:string; valore:string|number|boolean; }) => { arrConf.set(element.chiave, element.valore); }); console.log("passo"); AppConfigService.configurazione=new Configurazione(arrConf); console.log(AppConfigService.configurazione.getValore("durata")); subscriber.complete(); }, // errore error: (err) => { // gestisci errore console.log(err); subscriber.error(); } }); }) } }

Rispondi quotando