Объяснение «навигация за пределами угловой зоны» - PullRequest
0 голосов
/ 31 января 2019

Я работаю над приложением Electron, используя Angular.Я создал элемент меню Electron, где click () отправляет IPC на app.component.ts, чтобы изменить представление.Приведенный ниже код работает, но я получаю следующую ошибку в DevTools, если я вызываю router.navigateByUrl напрямую:

Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()'?

Как видите, теперь я вызываю router.navigateByUrl через ngZone, решая проблему, но несмотря начитая о NgZone в документах и ​​ища здесь и в других местах, я не понимаю, что это делает и зачем мне это нужно.

  1. Что не так с непосредственным вызовом this.router.navigateByUrl?

  2. Почему он говорит мне, что вызов находится за пределами угловой зоны, когда он вызывается в app.component.ts?

Электрон 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}`);
        });
    }
}

Заранее спасибо.

...