Angular 7 / Electron: маршрутизация не завершается после BrowserWindow.hide, за которым следует BrowserWindow.show - PullRequest
0 голосов
/ 15 января 2019

У меня есть приложение Angular 7, которое запускается в электронном окне. Электронный процесс в main.ts должен делать следующее:

  1. main.ts: Показать окно + URL-адрес загрузки для приложения Angular
  2. Угловой: делает свое дело
  3. Angular: использует ipcRenderer, чтобы сообщить основному процессу, что он временно сделан
  4. main.ts: BrowserWindow.hide ()
  5. main.ts: другие
  6. main.ts: BrowserWindow.show ()
  7. main.ts: mainWindow.webContents.send('route', '/myroute');
  8. Угловой: this.ipcRenderer.on('route', (event: any, route: string) => { this.router.navigateByUrl(route); });

Ожидаемое поведение : окно скрывается, затем отображается и показывает новый компонент.

Фактическое поведение : окно скрывается, затем отображается и показывает частично загруженный компонент, за которым следует компонент предыдущего маршрута (например, точка входа).

приложение-routing.module.ts

import { NgModule } from '@angular/core';
import { Router, RouterModule, Routes } from '@angular/router';

<route component imports>

const routes: Routes = [
    { path: '', redirectTo: '/entrypoint', pathMatch: 'full' },
    { path: 'entrypoint', component: EntryPointPageComponent },
    { path: 'myroute', component: MyRouteComponent },
    { path: '**', redirectTo: '/entrypoint' }
];

@NgModule({
    exports: [ RouterModule ],
    imports: [ RouterModule.forRoot(routes, { useHash: true }) ]
})

export class AppRoutingModule {
    constructor(private router: Router) {
        this.router.events.subscribe((value) => {
            console.log(`Router event! ${ typeof value}: ${ value }`);
        }, (err) => {
            console.log(`Router failure! ${ err }`);
        });
    }
}

Когда приходит время идти по маршруту к /myroute, я вижу следующие события, проходящие в следующем порядке: NavigationStart, RoutesRecognized, GuardsCheckStart, ChildActivationStart, ActivationStart, GuardsCheckEnd, ResolveStart, ResolveEnd, ActivationEnd, ChildActivationEnd, NavigationEnd, Scroll.

Наконец, я реализовал все жизненные циклы событий в MyRouteComponent с помощью операторов консоли, но ни один из них не был выполнен.

Есть идеи, что мешает маршрутизации работать успешно?

1 Ответ

0 голосов
/ 15 января 2019

Мы смогли решить это внутренне, и теперь я чувствую себя глупо.

Хитрость заключалась в том, чтобы обернуть запрос маршрутизации внутри ngZone.run().

...