在初始化其他模块之前,请等待全局用户对象



我有一个方法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)时,来自身份验证服务的用户对象仍然未定义。如何让一切都等待用户对象从服务器加载后再执行其他操作?

首先,制作一个函数(在AppTranslationModule中)来实现这一点:

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

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

最新更新