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 — модули загружаются динамически по требованию. Ускоряет старт. Для больших приложений, где не все модули нужны сразу.