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:
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.');
}
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...]
@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();
}
});
})
}
}
SEGUE...