2017-04-21 5 views
0

Ich habe eine Methode load(), die in einem globalen Autorisierungsdienst ausgeführt wird, der ein Benutzerobjekt vom Server abruft. Diese Methode wird mit APP_INITIALIZER ausgeführt. Das Verfahren sieht wie folgt aus:Auf globales Benutzerobjekt warten, bevor andere Module initialisiert werden

load(): Promise<any> { 
    return this.http.get(API_ENDPOINT + ApiConstants.AUTHENTICATE).map(response => response.json() as User).toPromise().then((data: any) => { 
     this.user = data; 
     this.translate.use(this.user.language); 
    }); 
} 

Ich bin mit NGX-übersetzen die Sprache des Benutzers auf dem Server zu erhalten und dann die entsprechende Übersetzungsdatei laden. Mein Übersetzungsmodul sieht folgendermaßen aus:

export class AppTranslationModule { 
constructor(private translate: TranslateService, private auth: AuthService) { 
    translate.addLangs(["en", "de"]); 
    translate.setDefaultLang("de"); 
    translate.use(this.auth.user.language); 
} 
} 

Das Problem ist, dass das Benutzerobjekt aus dem Auth-Dienst noch nicht definiert ist, wenn die translate.use(this.auth.user.language) tun. Wie kann ich alles darauf warten, dass das Benutzerobjekt vom Server geladen wird, bevor Sie etwas anderes tun?

Antwort

0

Zum einen machen eine Funktion (In AppTranslationModule), das dies tut:

translate.addLangs(["en", "de"]); 
translate.setDefaultLang("de"); 
translate.use(this.auth.user.language); 

Anruf load() von Auth Service von Ihrer Komponente und Antwort suchen. Rufen Sie nach Erhalt der Antwort diese Funktion auf, die die Übersetzung durchführt. Entfernen Sie Übersetzungsaufgaben aus dem Konstruktor. Rufen Sie stattdessen eine Funktion [nach dem Abrufen der Benutzerantwort] auf, die diese Aufgaben ausführt.

Verwandte Themen