Я не нашел возможности различить описанные вами случаи. Я нашел способ запретить ручную навигацию по маршруту, хотя
Вы можете проверить .navigated
свойство на маршрутизаторе. В соответствии с документами, это
True, если произошло хотя бы одно навигационное событие, иначе false
export class PreventDirectNavigationGuard implements CanActivate {
constructor(
private _router: Router,
) { }
canActivate(
_activatedRouteSnapshot: ActivatedRouteSnapshot,
_routerStateSnapshot: RouterStateSnapshot,
): boolean | UrlTree {
return this._router.navigated;
}
}
Также Angular имеет флаг триггера навигации. Из исходный код
Identifies how this navigation was triggered.
imperative - Triggered by `router.navigateByUrl` or `router.navigate`.
popstate - Triggered by a popstate event.
hashchange - Triggered by a hashchange event.
trigger: 'imperative' | 'popstate' | 'hashchange';