我正在使用Angular开发电子应用程序。我创建了一个Electron菜单项,其中click()将IPC发送到app.component.ts以更改视图。下面的代码有效,但是如果直接调用router.navigateByUrl,则会在DevTools中收到以下错误:
Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()'?
如您所见,我现在通过ngZone调用router.navigateByUrl,解决了问题,但是尽管在文档中阅读了有关NgZone的内容并在此处和其他地方进行了搜索,但我不知道这是做什么的,为什么我需要这样做。
直接调用this.router.navigateByUrl有什么问题?
当在app.component.ts中调用时,为什么告诉我该调用在Angular区域之外?
电子main.js
function sendToAngularRouter(request) { console.log('sending request'); win.webContents.send('routeToPage', request); }
角app.component.ts
export class AppComponent implements OnInit { constructor(public electronService: ElectronService, private router: Router, private zone: NgZone) {} ngOnInit() { this.electronService.ipcRenderer.on('routeToPage', (sender, arg) => { this.navigateTo(arg); }); } navigateTo(arg: string): void { this.zone.run(() => { this.router.navigateByUrl(`/${arg}`); }); } }
先谢谢您。
我正在使用Angular开发电子应用程序。我创建了一个Electron菜单项,其中click()将IPC发送到app.component.ts以更改视图。下面的代码有效,但是我得到了...
如文档所述:
区域提供了在异步任务之间持久存在的执行上下文