Angular 7/Electron:路由在 BrowserWindow.hide 后跟 BrowserWindow.show 后未完成

Angular 7/Electron: Routing does not complete after BrowserWindow.hide followed by BrowserWindow.show

我有一个在 Electron window 中运行的 Angular 7 应用程序。 main.ts 中的 Electron 进程必须执行以下操作:

  1. main.ts:显示window + 将url加载到Angular app
  2. Angular:做它的事
  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. Angular: this.ipcRenderer.on('route', (event: any, route: string) => { this.router.navigateByUrl(route); });

预期行为:window 隐藏,然后显示并显示新组件。

实际行为:window 隐藏,然后显示并显示一个部分加载的组件,然后是前一个路由的(例如入口点)组件。

app-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 的路线时,我看到以下事件按此顺序进行:NavigationStartRoutesRecognizedGuardsCheckStartChildActivationStart, ActivationStart, GuardsCheckEnd, ResolveStart, ResolveEnd, ActivationEnd, ChildActivationEnd, NavigationEnd, Scroll.

最后,我使用控制台日志语句在 MyRouteComponent 中实现了所有事件生命周期,但是其中 none 被执行了。

知道阻止路由成功工作的问题是什么吗?

我们能够在内部解决这个问题,现在我觉得自己很蠢。

诀窍是将路由请求包装在 ngZone.run() 内。