如何使用vuejs使用ipcRenderer从一个电子窗口向另一个电子窗口发送数据?

时间:2019-02-11 22:38:48

标签: vuejs2 electron vuex vuex-modules

我有一个组成部分:

openNewWindow() {
    let child = new BrowserWindow({

        modal: true,
        show: false, 

    });
    child.loadURL('http://localhost:9080/#/call/' + this.chatEntityId + '?devices=' + JSON.stringify(data));
    child.on('close', function () { child = null; });

    child.once('ready-to-show', () => {
        child.show();
    });

    child.webContents.on('did-finish-load', () => {
        console.log("done loading");
        ipcRenderer.send('chanel',  "data");
    });
}

然后在子窗口组件中:

mounted() {
    ipc.on('chanel', (event, message) => {
       console.log(message);
       console.log(event);
    });
}

我尝试了.oncreated()中的beforeCreate()并使用this.$nextTick(), with setTimeout`,但是没有任何效果。

我不想发送一些字符串数据,但是我希望发送对象,但是如您所见,事件简单字符串"data"不起作用。我没主意了。

我可以看到,这仅适用于如果我执行以下操作的组件的父组件:

  1. 发送
  2. 听主要过程
  3. 发送回event.sender

所以,问题是如何将任何形式的数据从一个窗口传递到另一个窗口?

1 个答案:

答案 0 :(得分:0)

好吧,漫长的夜晚之后,解决之后的早晨。

  1. 在某些vuejs组件中,例如单击按钮时会执行一些操作

ipcRenderer.send('chanel', someData);

  1. 在主要过程中

    ipcMain.on('chanel', (event, arg) => {
       let child = new BrowserWindow()
       // other stuff here
       child.loadURL(arg.url)
       child.on('show', () => {
            console.log("done loading");
            child.webContents.send('data',  arg);
       });
    })
    
  2. 在vuejs组件中,用于其他路由arg.url

    mounted() {
        ipc.on('chanel', (event, message) => {
           console.log(message);
           console.log(event);
        });
    }