angular
March 23

Как в Angular понять причину отмены перехода по ссылке?

Еще в Angular v14 было добавлено свойство code для события NavigationCancel. Оно содержит код, определяющий причину отмены перехода по навигации. По сути это обычный enum со следующим набором ключей:

  • NavigationCancellationCode.Redirect

Навигация не удалась, потому что guard вернул UrlTree для перенаправления

  • NavigationCancellationCode.SupersededByNewNavigation

Навигация не удалась, потому что была переопределена новой ссылкой

  • NavigationCancellationCode.NoDataFromResolver

Навигация не удалась, потому что один из resolver завершился без выдачи значения

  • NavigationCancellationCode.GuardRejected

Навигация не удалась, потому что guard вернул false.

Благодаря этому API когда навигация отменяется, мы можем определить причину отмены и выполнить различные действия по мере необходимости

import { NavigationCancel, NavigationCancellationCode, Router } from '@angular/router';

@Component(...)
export class MyComponent {
  constructor(router: Router) {
    router.events.subscribe(e => {
    
      if(e instanceof NavigationCancel) {
      
        if(NavigationCancellationCode.GuardRejected) {
          // ...
        }
        
      }
    })
  }
}