我的组件正确接收到一条消息(如调试器所见),但未刷新其视图。在IPC侦听器中需要进行任何手动操作吗?
这是我的组件HTML代码:
<div>
{{text}}
</div>
这是TypeScript:
import { Component, OnInit } from '@angular/core';
import { ipcRenderer } from 'electron'
@Component({
selector: 'app-receiver',
templateUrl: './receiver.component.html',
styleUrls: ['./receiver.component.scss']
})
export class ReceiverComponent implements OnInit {
text: string;
constructor() { }
ngOnInit() {
ipcRenderer.on('msg', function (event, arg){
this.text=arg;
})
}
}
我希望页面从Electron流程收到的新字符串显示在页面上,但不会发生
答案 0 :(得分:0)
IPC的事件处理在角度区域之外运行。该事件不是所谓的“猴子补丁”。您应该在ngZone.run
调用中应用更改。除此之外,您正在使用function
关键字,这将导致this
上下文更改为该函数,并且无法再访问类this
。使用箭头符号:
constructor(readonly nz: NgZone) { }
ngOnInit() {
ipcRenderer.on('msg', (event, arg) => {
this.nz.run(() => this.text = arg);
});
}
尽管不要忘记在ngOnDestroy
中对消息进行“取消监听”,否则您会在已销毁的指令上触发detectChanges,而angular不会那样:)