Kod*_*_12 3 javascript node.js electron angular ipcrenderer
在我的主机应用程序中,我有一个按钮,单击该按钮时,会将数据发送到我的角度应用程序。就像这样:
<button (click)="onClick()">Send Some Data</button>
Run Code Online (Sandbox Code Playgroud)
成分:
onClick() {
ipcRenderer.send("data-bridge",{name: 'John Smith', address: 'Main Street', date: new Date() );
}
Run Code Online (Sandbox Code Playgroud)
在我的角度应用程序中,我收到如下数据:
import { ElectronService } from 'ngx-electron';
export class AppComponent {
constructor( private electronService: ElectronService) {}
ngOnInit() {
if (this.electronService.ipcRenderer) {
this.electronService.ipcRenderer.on('data-bridge', (event, data) => {
console.log('got something', data)
})
}
}
}
Run Code Online (Sandbox Code Playgroud)
我注意到的行为是,点击按钮 x 次,我将看到警报 x 次:
所以这显然向我表明存在内存泄漏。解决方案很简单,在接收到事件后删除事件监听器。
我尝试过做类似的事情:
this.electronService.ipcRenderer.on('data-bridge', (event, data) => {
alert('got something');
this.electronService.ipcRenderer.removeAllListeners()
}
Run Code Online (Sandbox Code Playgroud)
但多次警报仍然会在单击一次时发生。
我无法使用 ipcRenderer.once 方法,因为我需要监听器保持打开状态,只是没有多个相同的监听器。如何删除 ipcRenderer.on('data-bridge', ...) 事件侦听器,以便每次单击按钮时,我只有一个事件侦听器?
小智 6
@pergy 的答案不适用于我的电子、node.js、vue.js 设置
但这成功了:
this.onData = (event, data) => {
console.log('got something', data)
})
let eventTargetRef = ipcRenderer.on('data-bridge', this.onData)
eventTargetRef.removeAllListeners('data-bridge')
Run Code Online (Sandbox Code Playgroud)
ipcRenderer.on()返回对 nodeEventTarget 的引用
removeAllListeners是 EventTarget 类的特定于 Node.js 的扩展。如果指定了 type,它将删除所有已注册的 type 侦听器,否则将删除所有已注册的侦听器。
| 归档时间: |
|
| 查看次数: |
12672 次 |
| 最近记录: |