Как установить ip c с сервисом angular 9 и основным процессом электронного - PullRequest
0 голосов
/ 25 мая 2020

У меня проблемы с событиями electronic- angular (полностью angular новичок) ip c. Вот мой код:

Electronhelper.service.ts

import { Injectable, NgZone } from '@angular/core';
import { ElectronService } from 'ngx-electron';

@Injectable({
  providedIn: 'root'
})

export class ElectronhelperService {
  appSettings: any;
  constructor(private electron: ElectronService){
    this.fetchAllSettings() ;
  }

  fetchAllSettings(){
    this.electron.ipcRenderer.send('fetch:Settings') ;

    this.electron.ipcRenderer.once('fetch:Settings::recieved', (event, data) => {
      this.appSettings = data[0];
    });
  }
}

main. js (электронный процесс, здесь все работает нормально)

ipcMain.on('fetch:Settings', () => {
   console.log('got on method')
   win.webContents.send('fetch:Settings::recieved', [settings])
}) ;

Теперь, если вы используете вышеуказанный сервис в другом компоненте или другом сервисе в качестве зависимости в их соответствующих конструкторах, тогда, когда я хочу получить доступ к this.appSetting в electronichelper.service.ts, он всегда остается неопределенным. Например:

appconfig.service.ts

import { Injectable } from '@angular/core';
import { Settings } from '../interface/settings' ;
import { ElectronhelperService } from './electronhelper.service';

@Injectable({
  providedIn: 'root'
})
export class AppconfigService {
  settings: Settings ;
  constructor(private helper: ElectronhelperService){
    console.log(this.helper.appSettings) ; // this returned as undefined
  }
}

Я знаю, что события ip c являются асинхронными c, но как я могу обрабатывать их внутри этих служб. Также настройки приложения берутся из пакета электронного магазина npm.

1 Ответ

1 голос
/ 25 мая 2020

Вы можете получать настройки синхронно, часто это вариант, если загрузка (и блокировка) не занимает слишком много времени:

fetchAllSettings() {
    this.appSettings = this.electron.ipcRenderer.sendSync('fetch:Settings')[0] ;
}

На бэкэнде вы не используете event.reply, а назначаете результат на event.returnValue:

ipcMain.on('fetch:Settings', (event) => {
    const data = getTheSettings();
    event.returnValue = data;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...