Копирование ответа по ссылке, предоставленной OP:
1- Создать service
:
import { Injectable } from '@angular/core';
import { IpcRenderer } from 'electron';
@Injectable({
providedIn: 'root'
})
export class IpcService {
private ipc: IpcRenderer | undefined = void 0;
constructor() {
if ((window as any).require) {
try {
this.ipc = (window as any).require('electron').ipcRenderer;
} catch (e) {
throw e;
}
} else {
console.warn('Electron IPC was not loaded');
}
}
public on(channel: string, listener: any): void {
if (!this.ipc) {
return;
}
this.ipc.on(channel, listener);
}
public send(channel: string, ...args): void {
if (!this.ipc) {
return;
}
this.ipc.send(channel, ...args);
}
}
2- Используйте service
внутри component
:
export class TestComponent {
constructor(private readonly ipc: IpcService) {
this.ipc.on('my-event', (e, val) => {
console.log('my-event: ' + val);
});
}
}
Важное примечание: Во время работы Angular в режиме разработки вы всегда получите ошибку Electron IPC was not loaded
,по понятным причинам.Но как только вы соберете приложение и запустите его с Electron, все будет работать гладко и нормально.
Протестировано и проверено с Angular 8.1.0
и build --prod
.
Все кредиты до оригиналавтор .