首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主进程和渲染进程之间的角和电子- IPC通信

主进程和渲染进程之间的角和电子- IPC通信
EN

Stack Overflow用户
提问于 2018-04-10 17:48:04
回答 1查看 2.2K关注 0票数 2

有一些小型模型:

代码语言:javascript
复制
export class SettingsModel {
  DbFileName: string;
}

主要过程:

代码语言:javascript
复制
ipcMain.on('getSettings', function(event) {
    event.sender.send('resultSettings', 'Test settings');
});

IpcService:

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import { ElectronService } from 'ngx-electron';

@Injectable()
export class IpcService {
  constructor(private _electronService: ElectronService) {}

  public on(channel: string, listener: Function): void {
    this._electronService.ipcRenderer.on(channel, listener);
  }

  public send(channel: string, ...args): void {
    this._electronService.ipcRenderer.send(channel, args);
  }
}

最后是角分量:

代码语言:javascript
复制
export class SettingsComponent {
  constructor(private _electronService: ElectronService, private _db: DbService, private _ipc: IpcService) {
    this.Settings = new SettingsModel();
    console.log("1:" + this.Settings)
    _ipc.send('getSettings');
    console.log("2:" + this.Settings)
    _ipc.on('resultSettings', this._updateSettings);
    console.log("3:" + this.Settings)
  }

  private _updateSettings(evt: any, result: string) {
    console.log("4:" + result);
    console.log("5:" + this.Settings);
    this.Settings.DbFileName = result;
  }

  Settings: SettingsModel;
}

结果铬日志:

代码语言:javascript
复制
1:[object Object]
2:[object Object]
3:[object Object]
4:Test settings
5:undefined
Uncaught TypeError: Cannot set property 'DbFileName' of undefined

看起来IPC运行得很好,但是由于某种原因,当我得到响应时,我有一个不同的SettingsComponent类实例。我不知道为什么,也不知道怎么处理。有什么想法或建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-13 06:55:37

看起来这个问题既不是角的,也不是电子的,也不是工控机的,而是TypeScript的。

代码语言:javascript
复制
public on(channel: string, listener: Function): void {
  this._electronService.ipcRenderer.on(channel, listener);
}

我必须使用箭头表达式=>

代码语言:javascript
复制
public on(channel: string, listener: Function): void {
  this._electronService.ipcRenderer.on(channel, (evt, args) => listener(evt, arg));
}

代码语言:javascript
复制
_ipc.on('resultSettings', (evt, args) => this._updateSettings(evt, args));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49760019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档