0

我有一个load()在全局授权服务中运行的方法,该服务从服务器获取用户对象。此方法与 APP_INITIALIZER 一起运行。该方法如下所示:

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);
    });
}

我正在使用 ngx-translate 在服务器上获取用户的语言,然后加载相应的翻译文件。我的翻译模块如下所示:

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

问题是在执行translate.use(this.auth.user.language). 如何让一切都等待用户对象从服务器加载,然后再执行其他操作?

4

1 回答 1

0

首先,创建一个执行此操作的函数(在 AppTranslationModule 中):

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

从您的组件调用 Auth 服务的 load() 并寻求响应。得到响应后,调用该函数进行翻译。从构造函数中删除翻译任务。相反,调用一个执行这些任务的函数[在获得用户响应后]。

于 2017-04-21T11:21:36.057 回答