установка глобальной переменной в обработчике событий ipcRenderer.on, работающей по ионному на электроне, не работает - PullRequest
0 голосов
/ 11 сентября 2018

Это мой код в home.ts для получения значений из main-process

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
declare var electron : any;

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
  arguments: any="ping";
  constructor(public navCtrl: NavController) {
  }
  ionViewDidLoad() {
    electron.ipcRenderer.send("test_channel","ping");
    electron.ipcRenderer.on("test_channel", function (err,arg) {
      this.arguments=arg; // receive new value "pong" from main.js
      console.log("Message received from electron: "+arg); // works fine
    });
    console.log("Message received from electron: "+this.arguments); //does not work, still default value
  };
}

Это добавляется в мой код в main.js и работает для получения события от render-process

var ipcMain = require('electron').ipcMain;
mainWindow.webContents.openDevTools();
ipcMain.on("test_channel",function(err,arg){
  console.log(err);
  console.log("Received message: "+arg);
  global.sharedObj = {prop1: arg};
  console.log("Sending message back!");
  // Send message back!
  mainWindow.webContents.send("test_channel",arg+'yeah');
}) 

Это добавлено в мой index.html, чтобы он работал для ionic

  <script>
    const electron = require('electron');
  </script>

1 Ответ

0 голосов
/ 13 сентября 2018

Прежде всего, не дублируйте имя сообщения.и в main.js, отправьте запрос на событие процессу визуализации, используя event.sender.send, как показано ниже: -

ipcMain.on('message_name', (event,args) => {
   event.sender.send('message_name_2', args)
});
...