Angular: маршрутизация, guards и interceptors

Guards (охранники маршрутов)

  • CanActivate — разрешает/запрещает доступ к маршруту.
  • CanActivateChild — разрешает/запрещает доступ к дочернему маршруту.
  • CanDeactivate — разрешает/запрещает уход с текущего маршрута.
  • Resolve — выполняет действие перед переходом (обычно ждёт данные с сервера).
  • CanLoad — разрешает/запрещает загрузку асинхронно загружаемого модуля.

⚠️ Классовые guard-интерфейсы (CanActivate и т.д.) устарели с Angular 15.2 в пользу функциональных guards (CanActivateFn, CanDeactivateFn, ResolveFn и др.). CanLoad устарел в пользу CanMatch.


Resolver

Route Resolver используется для предзагрузки части данных при навигации между маршрутами. Улучшает UX: данные подгружаются до перехода на компонент.


runGuardsAndResolvers

Настраивает, когда повторно запускать guards и resolvers маршрута (например, paramsChange, pathParamsChange, always или пользовательская функция) — полезно, когда нужно перезапросить данные при изменении параметров.


HttpInterceptor

Часть @angular/common/http. Инспектирует и трансформирует HTTP-запросы приложения к серверу и ответы обратно. Типичные задачи: аутентификация (добавление токена), логирование, обработка ошибок, кэширование.


Eager vs Lazy loading

  • Eager loading — стратегия по умолчанию: feature-модули загружаются до старта приложения. Подходит для небольших приложений.
  • Lazy loading — модули загружаются динамически по требованию. Ускоряет старт. Для больших приложений, где не все модули нужны сразу.