2017-12-22 5 views
1

Ich möchte ein Modul in meinem Projekt mit einer bestimmten Konfiguration aus einer Datei laden, diese Konfigurationsdatei könnte zur Laufzeit geändert werden und die Anwendung sollte mit den neuen Änderungen geladen werden, wenn der Browser ist aktualisiert.Angular 5 - Dynamische Module Konfiguration

Was ich jetzt mache, ist, den Konfigurationsdateipfad an das Modul in der "forRoot" -Methode zu senden und die Konfiguration mit der "useFactory", die auf eine "load" -Methode zeigt, diese "load" -Methode zu verwenden Verwenden eines HTTP GET, um meine Konfigurationsdatei abzurufen. Alles scheint mit "ng build" gut zu funktionieren, bis ich "ng build --prod --build-optimizer" ausführe, was einen "Fehler beim statischen Auflösen der Symbolwerte" verursacht.

Ich nehme an, seine Ursache ist, weil ich einen Anbieter mit "UseFactory" innerhalb der statischen "ForRoot" -Methode verwenden und dass "UseFactory" auf eine nicht-statische Methode verweist. Wie ist es möglich, damit umzugehen? Ist das ein guter Ansatz? Diese

ist, wie meine ‚forRoot‘ Methode und ‚InitConfig‘ Methode wie folgt aussehen:

export class JwtSecurityModule { 
    public static forRoot(configPath:string) { 
     return { 
     ngModule: JwtSecurityModule, 
     providers: [ 
      AppConfig, 
      { 
       provide: APP_INITIALIZER, 
       useFactory: initConfig, 
       deps: [AppConfig, configPath], 
       multi: true 
      } 
     ] 
     }; 
    } 
    ... 
} 
... 
export function initConfig(config:AppConfig, configPath: string) { 
    return() => config.load(configPath); 
} 

Antwort

1
export function initConfig(config:AppConfig, configPath: string) { 
    return(): Promise<any> => { 
    return new Promise((resolve, reject) => { 
     config.load(configPath) 
     resolve(); 
    }); 
    }; 
} 

Soweit ich weiß, müssen Sie ein Versprechen zurückzukehren.

Vielleicht Angular 5 ist nicht meine APP_INITIALIZER im Moment läuft :(

+0

Dank, die funktionierten, brauchte ich Config-Pfad als Anbieter hinzuzufügen und den Wert mit dem "useValue Klausel zu senden. –