Mar*_*328 6 electron angular2-changedetection angular
我有一个使用Angular 2的Electron应用程序.应用程序正常工作,直到使用ipcRenderer从本地JSON文件加载数据.然后,作用于服务中的数据的按钮不再触发改变检测过程以更新视图.我创建了一个简化的示例应用程序,它在这里演示了这个问题:https: //github.com/marshmellow1328/electron-angular-change-detection
我不知道为什么按钮停止触发本机更改检测.必须添加ChangeDetectorRef似乎没有必要.如果是的话,我想了解原因.
yur*_*zui 13
我调查了你的问题,并确定它发生是因为readFile处理程序在角度区域外执行.因此,它不会对您的点击事件做出反应,因为您离开了区域负责变更检测.
什么是最简单的解决方案?
app.component.ts
constructor(private zone: NgZone) {
...
this.zone.run(() => {
data.values.forEach(( value ) => { this.service.addValue( value ); } );
});
Run Code Online (Sandbox Code Playgroud)
然后你可以摆脱 this.changeDetector.detectChanges();
随着zone.run(...)你明确地使代码在Angulars区域内执行,之后运行更改检测.
还有一条建议:
我注意到你的代码中的reduntant代码app.component.ts:
private service: Service;
constructor(service: Service ) {
this.service = service;
}
Run Code Online (Sandbox Code Playgroud)
您可以像下面这样重写它:
constructor(private service: Service ) {}
Run Code Online (Sandbox Code Playgroud)
希望这对你有所帮助!
| 归档时间: |
|
| 查看次数: |
1386 次 |
| 最近记录: |