Angular 7: Как определить причину NavigationCancel - PullRequest
0 голосов
/ 21 февраля 2019

Что-то в этом роде говорит мне, что событие NavigationCancel происходит, но я хотел бы знать, что бы ни вызвало это:

например, AppComponent (выдержка):

constructor (
  ....
  private router: Router
)  {
     router.events.subscribe(e => {
       if (e instanceof NavigationCancel) {
         // PLEASE TELL ME, WHO DID CALL ME ? <---
       }
     });
   }

Что-то (сторож, msal, .. и т. д.) удаляет маршрут каждый раз, если я обновляю браузер, последний посещенный маршрут пропадает.Глубокая связь в настоящее время невозможна.

Обходной путь может быть следующим: мне нужно сохранить последний маршрут в LocalStorage и заставить приложение переключиться на этот маршрут.Возможно, если я найду триггер, возможно, я найду другое решение.

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Создание службы, которая будет уведомлена о выходе из строя охраны, может работать на вас.

Как вы можете видеть здесь вы не можете подключиться к службе маршрутизатора, поэтому некоторые шаблоныКод требуется для охраны.Если он возвращает false, обратитесь в службу, в которой хранятся ошибки защиты.

Не забудьте удалить ошибки при событии начала навигации.

Вы можете отправить запрос функции для Angular Team, чтобы создать такуюкрюк, чтобы иметь возможность получить ошибки охраны.

0 голосов
/ 02 марта 2019

Вместо boolean вы также можете вернуть UrlTree из охраны с дополнительными параметрами.Так что если вы перенаправляете на /home, вы бы сделали это следующим образом:

  canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    if (!this.authService.isLoggedIn) {
      return this.router.createUrlTree(['/home', { message: 'You shall not pass' }]);
    } else {
      return true;
    }
  }

Тогда вы можете прочитать это message в целевом местоположении с помощью ActivatedRoute#params.

Пример взят из здесь .

0 голосов
/ 25 февраля 2019

NavigationCancel происходит, когда охрана CanLoad или CanActivate предотвращает загрузку дочернего маршрута.Если вы хотите отладить события маршрутизатора, добавьте enableTracing: true в вашу RouterModule конфигурацию .Кроме того, NavigationCancel имеет свойство reason , которое может содержать полезную информацию.

...