Managing Event Listeners
我们可能想要移除掉某个IPC监听器,IPC模块为异步和同步进程提供了相似的语法。如果想要移除主进程中的单个监听器,语法为:
ipcMain.removeListener(channel name, function)
类似地,在移除渲染进程的单个监听器:
ipcRenderer.removeListener(channel name, function)
其中,function引用到相应的on
方法。
如果想移除某个channel所有的监听器,可以使用removeAllListeners
方法,基本语法如下:
ipcMain.removeAllListeners(channel)
或
ipcRenderer.removeAllListeners(channel)
前两节的例子中,我们的两个监听器在内部定义了自己的函数。如果主进程想知道用户是否已经登录了系统,就需要如下框架:
function userDidLogin() {
ipcRenderer.on('userLogin', this.handleLoginSuccess);
}
function userDidLogout() {
ipcRenderer.removeListener('userLogin', this.handleLoginSuccess);
}
function handleLoginSuccess(event, args) {
console.log('data', args.data);
}
应用可能通过用户登录状态来改变菜单或其他项目。对于这个例子,状态一旦改变,就没有必要继续监听事件了。Electron的IPC模块提供了一个移除监听器更实用的方法:
ipc.once(channel, listener)
这个方法对同步和异步方式都适用。它会监听特定channel,一旦受到相应事件,就会执行监听器的方法,然后移除这个监听器。
Summary
虽然IPC模块的方法数量不多(只有发送和接收方法)但这是Electron进程见协作的基石。你将使用IPC模块从渲染进程的用户活动来启动主进程的第三方Node库。下一章,我们将利用他们去处理Electron的对话模块。