我在Electron上运行了Angular 4应用程序。
在我的主要组件中,我运行一个服务,打开一个保存的文件,并在名为“session”的对象上设置其参数。
ngOnInit(): void {
this.Service.ready.subscribe(() => {
this.session = this.Service.session;
console.log(this.session.name)
});
this.Service.startService();
}
我要么使用文件对话框打开会话文件,要么在初始化应用程序时加载最后一个会话文件。我通过订阅我的服务在加载文件时发出的'ready'事件来更新我的UI。请注意,对于打开最新文件和使用对话框加载文件,它都运行相同的方法。
问题: 通过对话框打开文件文件时,UI会立即更新。在启动时加载上一个会话时,UI不会更新。
我尝试了什么 该服务使用NgZone来触发变更检测。 订阅显示正确的会话设置为变量'this.session' 我尝试过使用ChangeDetectorRef,但没有区别。
当我使用相同的方法和事件来触发它时,为什么变化检测有差异?它是否与仍在初始化的组件有关?
更新以显示服务中的区域更新
来自我的服务:
loadSession(path: string): void {
fs.readFile(path, { encoding: 'utf-8' }, (err, data) => {
if (!err) {
var session = JSON.parse(data);
console.log(session);
this.zone.run(() => {
this.session = session;
this.readyToStart();
this.notify("Opened Session:", this.session.name, null);
console.log("opened session");
});
} else {
console.log(err);
}
});
}
我的readyToStart方法发出'Ready'事件
答案 0 :(得分:0)
为什么不像这样使用LoggerService
:
this.logger.tick_then(() => this.session = this.Service.session);
这会将此更改置于下一个更改检测周期