Angular 2 变化检测因 Electron 而崩溃

标签 angular electron angular2-changedetection

我有一个使用 Angular 2 的 Electron 应用程序。该应用程序工作正常,直到使用 ipcRenderer 从本地 JSON 文件加载数据。然后,作用于服务中数据的按钮不再触发更改检测过程来更新 View 。我创建了一个简化的示例应用程序来演示这里的问题: https://github.com/marshmellow1328/electron-angular-change-detection

我不知道为什么按钮停止触发 native 更改检测。必须添加 ChangeDetectorRef 似乎没有必要。如果是,我想了解原因。

最佳答案

我调查了您的问题并确定它的发生是因为 readFile 处理程序在 Angular 区域之外执行。因此,它不会对您的点击事件使用react,因为您离开了负责更改检测的区域。

最简单的解决方案是什么?

app.component.ts

constructor(private zone: NgZone) {
...
this.zone.run(() => {
  data.values.forEach(( value ) => { this.service.addValue( value ); } );
});

然后你就可以去掉 this.changeDetector.detectChanges();

使用 zone.run(...),您可以明确地让代码在 Angulars 区域内执行,然后再运行更改检测。

还有一个建议:

我注意到您的 app.component.ts 中有冗余代码,例如:

private service: Service;

constructor(service: Service ) {
    this.service = service;
}

你可以像这样重写它:

constructor(private service: Service ) {}

希望对你有帮助!

关于Angular 2 变化检测因 Electron 而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41254904/

相关文章:

java - 授权后不显示登录信息

javascript - 如何在 Electron.net 中接收多个参数

electron - 如何恢复 Electron 应用程序中的默认窗口大小?

javascript - 目标不是Electron-React-Typescript-Webpack应用程序中的DOM元素

angular - 模板更改@Prop() 检测

google-maps - 带有 angular2 应用程序的 angular2-google-maps

angular - 为什么在组件内部调用 detectChanges() 不会更新值,但在 setTimeout() 中包装代码会更新值?

Angular2 ChangeDetection 还是 Observable?

Angular 2 : Pass value from attribute directive as a component variable

javascript - Angular2 从应用程序外部调用公开方法并丢失更改绑定(bind)