Проверяет понимание механизма route guards в Angular и умение возвращать асинхронные результаты для управления навигацией.
В Angular route guard — это функция или класс, реализующий интерфейс CanActivate, CanDeactivate, CanLoad и другие. На первый взгляд кажется, что guard просто отвечает «да» или «нет» на вопрос, можно ли перейти на маршрут. Но на самом деле тип возвращаемого значения шире и даёт больше гибкости.
Возврат UrlTree особенно полезен, когда нужно не просто запретить переход, а сразу отправить пользователя в нужное место, например на страницу авторизации с сохранением исходного URL.
@Injectable({ providedIn: 'root' })
export class AuthGuard implements CanActivate {
constructor(private auth: AuthService, private router: Router) {}
canActivate(): boolean | UrlTree {
if (this.auth.isLoggedIn()) {
return true;
}
// редирект на логин с сохранением целевого URL
return this.router.createUrlTree(['/login'], {
queryParams: { redirect: this.router.url }
});
}
}
canActivate(): Observable<boolean | UrlTree> {
return this.auth.checkToken().pipe(
map(valid => valid ? true : this.router.createUrlTree(['/login']))
);
}
Такой подход избавляет от необходимости вручную вызывать router.navigate внутри guard и делает логику навигации декларативной.
Итог: возврат UrlTree, Observable и Promise делает guard мощным инструментом управления навигацией, позволяя совмещать проверку прав и автоматические редиректы в одном месте.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию