我有一个在 Electron 窗口中运行的 Angular 7 应用程序。 main.ts
中的 Electron 进程必须执行以下操作:
main.ts
:显示窗口 + 加载 Angular 应用程序的 url- Angular:做它该做的事情
- Angular:使用 ipcRenderer 告诉主进程它已暂时完成
main.ts
:BrowserWindow.hide()main.ts
:还有其他main.ts
:BrowserWindow.show()main.ts
:mainWindow.webContents.send('route', '/myroute');
- Angular:
this.ipcRenderer.on('route', (event:any,route:string) => { this.router.navigateByUrl(route); });
预期行为:窗口隐藏,然后显示并显示新组件。
实际行为:窗口隐藏,然后显示,并显示部分加载的组件,然后显示前一个路由的(例如入口点)组件。
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
时,我看到以下事件按此顺序执行:NavigationStart
、RoutesRecognized
、 GuardsCheckStart、ChildActivationStart、ActivationStart、GuardsCheckEnd、ResolveStart、ResolveEnd/code>、ActivationEnd
、ChildActivationEnd
、NavigationEnd
、滚动
。
最后,我使用控制台日志语句实现了 MyRouteComponent
中的所有事件生命周期,但没有一个被执行。
您知道阻止路由成功运行的问题是什么吗?
最佳答案
我们能够在内部解决这个问题,但现在我感觉很愚蠢。
诀窍是将路由请求 package 在 ngZone.run()
中。
关于Angular 7/Electron : Routing does not complete after BrowserWindow. 隐藏,然后是 BrowserWindow.show,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54189515/