Как использовать электронное меню для выполнения угловой навигации 7 - PullRequest
0 голосов
/ 28 ноября 2018

Я использую Angular 5.2.11 с выборочной версией 3.0.7 и пытаюсь использовать меню Electron для перехода к угловому 5 компоненту.Когда я щелкаю по электронному меню, оно переходит на страницу, но мой компонент выполняет конструктор, а не только угловые хуки жизненного цикла, пока я не нажму в электронном окне.Затем страница загружается и работает так, как и должно быть.

файл menu.js:

const { Menu } = require('electron');
const menuTemplate = [
      label: 'Maintenance',
      submenu: [
          {
              label: 'Sar Maintenance',
          }
      ];

menu = Menu.buildFromTemplate(menuTemplate);    
Menu.setApplicationMenu(menu);

exports.ApplicationMenu = menu;

файл index.ts:

const { app } = require('electron');
const BrowserWindow = require('electron').BrowserWindow

let ipcm = require('electron').ipcMain;
let appmenu = require('./menu.js');
let menu = appmenu.ApplicationMenu;
let mainWindow;

function createMainWindow () {
    mainWindow = new BrowserWindow({width:  800, height: 800});
    mainWindow.loadURL(`file://${__dirname}/index.html`);

    menu.items[1].click = () => {    // Sar Mainenance
        mainWindow.webContents.send('goto-sar', 'sarArg');
    }

    mainWindow.on('closed', () => {
        mainWindow = null
    });
}

app.on('ready', createMainWindow)

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
});

app.on('activate', () => {
  if (mainWindow === null) {
    createMainWindow()
  }
})

ipcm.on('page-nav-complete', () => {
    console.log('NavComplete');
    app.focus();
});

Угловой app.component.ts:

let ipcRenderer = require('electron').ipcRenderer;
app.component.ts constructor:

ipcRenderer.on('goto-sar', function(sender, arg) {
  this.openSar();
});

угловой метод в app.component.ts:

openSar () {
    this._router.navigate(['/sargen']);
    ipcRenderer.send('page-nav-complete');
}

Кажется, что mainWindow не фокусируется?Что я делаю не так?

1 Ответ

0 голосов
/ 28 ноября 2018

Вам придется использовать NgZone.run().Больше здесь - Angular NgZone .Вот что мне нужно было сделать, чтобы Angular работал с Electron и использовал навигацию по маршруту внутри ipcRenderer.

Пример

import { OnInit, NgZone } from '@angular/core';
let ipcRenderer = require('electron').ipcRenderer;

export class MyComponent implements OnInit {

    constructor(private ngZone: NgZone) { }

    ngOnInit() {
        ipcRenderer.on('goto-sar', (event, arg) => {
            this.ngZone.run(() => {
                this.openSar();
            });
        });
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...