angular 2 router.navigate 不适用于电子 IPC 回调

pra*_*bhu 2 electron angular

我正在使用电子开发 angular 2 应用程序。这就是我想要做的。
我在 html 中有一个下一个按钮 <button (click) = nextButtonClickedHandler()>

nextButtonClickedHandler被描述为如下:

public nextButtonClickedHandler() {
  this.requestElectronMainProccess(this.afterResponseReceived);
}

private public afterResponseReceived() {
  this._router.navigate(['/next', 'route']);
}

public requestElectronMainProccess(callbackFn: Function) {
  this._electronService.send('request', 'some data');
  this._electronService.once('response', callbackFn);
}
Run Code Online (Sandbox Code Playgroud)

所以,在这里,控制台上的事件日志_router.navigate

  1. 路线认可
  2. 卫兵检查开始
  3. 卫兵检查成功
  4. 警卫检查结束
  5. 导航端

我还添加了一个控制台语句来查看承诺返回的内容。

this._router.navigate(['/next', 'route']).then(
 success => console.log('navigation success');
 failure => console.log('navigation end');
);
Run Code Online (Sandbox Code Playgroud)

它打印“导航成功”。但是,该组件不会加载。不知道发生了什么。任何帮助是极大的赞赏。

注意:如果不涉及电子,则不会发生这种情况。例如下面的代码工作得很好

public nextButtonClickedHandler() {
  this._router.navigate(['/next', 'route']);
}
Run Code Online (Sandbox Code Playgroud)

小智 5

解决方法...

import { Router } from '@angular/router';
import { NgZone } from '@angular/core';

constructor(private zone: NgZone, private router: Router){
  ipcRenderer.on('youevent', (event) => 
     this.zone.run(() => this.router.navigate([path]))
  )
}
Run Code Online (Sandbox Code Playgroud)