javascript - Angular 2 *有时不更新*

标签 javascript angular electron

我有一个在 Electron 上运行的 Angular 4 应用程序。

在我的主要组件中,我运行了一个服务,它打开一个保存的文件并在一个名为“ session ”的对象上设置它的参数。

  ngOnInit(): void {


this.Service.ready.subscribe(() => {

  this.session = this.Service.session;
  console.log(this.session.name)

});

this.Service.startService();
  }

我要么使用文件对话框打开 session 文件,要么在初始化应用程序时加载最后一个 session 文件。我通过订阅我的服务在完成加载文件时发出的“就绪”事件来更新我的 UI。请注意,对于打开最近的文件和使用对话框加载文件,它运行相同的方法。

问题: 通过对话框打开文件时,UI 会立即更新。在启动时加载最后一个 session 时,UI 不会更新。

我尝试了什么 该服务使用 NgZone 来触发变更检测。 订阅显示正确的 session 设置为变量“this.session” 我试过使用 ChangeDetectorRef 但没有区别。

为什么我用同样的方法和事件去触发变化检测会有差异?是否与仍在初始化的组件有关?

更新以显示服务中的区域更新

来 self 的服务:

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 方法发出“就绪”事件

最佳答案

为什么不这样使用 LoggerService:

this.logger.tick_then(() => this.session = this.Service.session);

这会将此更改放入下一个更改检测周期

关于javascript - Angular 2 *有时不更新*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45372079/

相关文章:

javascript - Angular - 模板中调用的模型方法在无限循环中执行

Angular 单元测试 : TypeError: Cannot read property 'root' of undefined

electron - 将 create-react-app 与 electro-builder 结合使用

electron - setSimpleFullScreen导致应用失去对 Electron 的关注?

javascript - Flatiron/director 中的可选参数

javascript - jQuery 获取点击元素的父元素,然后获取其子元素

javascript - 我如何告诉 Angular 2 停止自动设置 Content-Type header ?

javascript - 在手机上设置超时

javascript - 数组作为函数参数/参数

javascript - 如何通过函数外部可用的ipc调用使结果可用?