问题是,
-
appcomponent's
ngOnInit
将首先被调用,因此
getUIStrings
函数将被调用。它是
promise
最终将得到解决并将结果分配给
this.globals.UIStrings
(假设promise需要5分钟才能解决)
-
当promise仍在处理中时,
DashboardComponent
已加载并且
this.dashboardMessage
将
undefined
作为
这是全球性的。UIString
还没有任何数据
.
-
在html中,如果你使用
{{globals.UIStrings["DashboardAdminDesc"]}}
,它会起作用的,因为在某个时间点
这是全球性的。UIString
当promise被解析时,将有数据。在HTML中,
this.globals
是引用类型。因此,如果您从服务中更改它,它将直接在使用它的任何HTML中可用(而不是在
.ts
文件)
但是
如果你使用
{{this.dashboardMessege}}
,它将永远存在
未定义
因为
dashboard's
ngOnInit
在promise解析之前执行。
解决方案
我给你一些想法。由于代码没有经过测试,所以不要指望它能正常工作。我不碰
这是全球性的。UIString
在下面的代码片段中。您可以根据需要重构以下代码。
注:
由于您的
dashboard component
在promise解析之前执行。因此,应用程序和应用程序之间没有同步;仪表板组件。
global.service
response = new Subject<any>(); // consider response is your globals.UIStrings
async getUIStrings() {
let url = "/datacontract/getuistrings";
let promise = await this.http.get<APIResponse>(url).pipe(map(x => { return x.responsePayload })).toPromise<any>();
this.response.next(promise.strings); // data will be emitted for here
}
仪表板组件
export class DashboardComponent {
dashboardMessage: string;
constructor(
public globals: Globals,
) {
this.globals.response.subscribe(data=>{ // data will be received here
if (condition) {
this.dashboardMessage = data["DashboardAdminDesc"];
}
else {
this.dashboardMessage = data["DashboardDesc"];
}
})
}
}
.html
{{dashboardMessge}} will always output desire result