Использование кнопки «Назад» и последующее нажатие на routerLink приводит к ошибке

В приложении Cordova, обертывающем угловое приложение, после того, как я нажимаю кнопку «Назад», кажется, что приложение больше не находится в «угловой зоне», поэтому, если после этого я нажму на любую ссылку на маршрутизатор, оно ничего не сделает и выдаст ошибку Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()?

Пробовали добавлять «pathMatch: 'full'» к маршрутам. Также попробовал решение здесь: Предупреждение директивы Angular 7 routerLink ' Навигация срабатывает за пределами зоны Angular', и она работает, но мне бы не хотелось писать this.ngZone.run(() => this.router.navigateByUrl('')) на каждой странице. Я чувствую, что синтаксис routerLink="" намного чище.

Моя кнопка, которую я нажал, выглядит так:

<button type="button" class="btn btn-success  btn-wide" routerLink="/search-by-keyword">

Код, где он ломается, выглядит следующим образом (обратите внимание, что все логические значения верны)

navigateByUrl(url, extras = { skipLocationChange: false }) {
        if (isDevMode() && this.isNgZoneEnabled && !NgZone.isInAngularZone()) {
            this.console.warn(`Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()'?`);
        }

Это отлично работает, если я просто запускаю его в Angular. Но когда я запускаю приложение Cordova, обертывающее его, оно терпит неудачу. Стоит ли мне об этом беспокоиться, поскольку эта ошибка возникает только в DevMode?

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


person Philip    schedule 25.07.2019    source источник


Ответы (1)


Мы столкнулись с той же проблемой и в итоге создали функцию «перенаправления» в одной из служб приложения, которая оборачивает навигацию с помощью ngZone, а затем передает туда все наши маршруты:

import { Injectable, NgZone } from '@angular/core';
...
constructor(
    private ngZone: NgZone,
    ...

public redirect(routerArray: any) {
    this.ngZone.run(() => {
        this.router.navigate(routerArray);
    });
}
person Oren Agiv    schedule 25.08.2019
comment
Спасибо, хотя на самом деле я использовал это хакерское решение в этом блоге: weblogs.thinktecture.com/thomas/2017/02/ - person Philip; 27.08.2019