🅰️ День 4

🗺 Теоретическая подготовка: Ментальный сдвиг

КонцептКак это в React (react-router-dom)Как это в Angular 20+ (@angular/router)
Параметры URLХуки useParams(), useSearchParams().Свойства-сигналы через декоратор @Input() или DI-сервис ActivatedRoute.
Защита роутовКомпоненты-обертки (<ProtectedRoute><Outlet /></ProtectedRoute>).Functional Guards: Чистые функции, внедряемые в конфигурацию роута через DI.
ПредзагрузкаМетод loader в Data Routers (запускается параллельно с рендером).Resolvers: Функции-трансформеры, которые не пустят компонент на экран, пока данные не разрешатся.

Шаг 1: Функциональный роутинг, Lazy Loading и Component Input Binding (3 часа)

  • Теория: Изучение декларативной конфигурации роутера (provideRouter). Разбор флага withComponentInputBinding(), который автоматически превращает query-параметры (?search=apple) и dynamic params (/user/:id) в стандартные нативные сигнальные инпуты компонента (input()), полностью избавляя от ручного парсинга URL.
  • Практика: Создание ленивого модуля для админ-панели лаборатории (loadComponent: () => import(...)). Настройка сквозного прокидывания параметров URL напрямую в стейт без участия хуков.

Шаг 2: Реактивные мосты: Трансформация RxJS потоков в Signals (toSignal) (3 часа)

  • Теория: Роутер и HTTP-клиент Angular исторически возвращают асинхронные потоки RxJS Observable. Но шаблоны в Zoneless-режиме хотят читать синхронные Signals. Изучаем функцию-мост toSignal(), которая подписывается на поток, управляет его жизненным циклом и конвертирует асинхронные события в синхронный стейт.
  • Практика: Реализация поиска «на лету» с дебаунсом. Связываем input-сигнал поисковой строки, пропускаем его через RxJS операторы debounceTime и switchMap для отмены Race Conditions при запросах к API, и преобразуем результат в нативный Signal для хирургического вывода в DOM.

Шаг 3: Функциональные Guards и Resolvers в Zoneless-окружении (2 часа)

  • Теория: Полный отказ от старых ООП-классов CanActivate. Написание легковесных стрелочных функций-гвардов, которые проверяют статус авторизации во внешнем сторе или куках перед переходом. Изучение работы резолверов: как дождаться ответа от сервера до того, как компонент начнет инициализироваться.
  • Практика: Написание гварда authGuard, который запрашивает статус ядра из нашего вчерашнего ExternalEngineStore (используя фабричный inject), и блокирует переход на страницу админки, если внешнее ядро находится в режиме Offline.

🧪 Лабораторный чек-лист конца дня (Что должно работать в браузере)

  1. При вводе в URL /dashboard?search=angular компонент автоматически подхватывает строку поиска через сигнальный инпут.
  2. Сетевые запросы не дублируются при быстром вводе благодаря RxJS-операторам, а UI не моргает, так как граф зависимостей обновляется синхронно.
  3. Попытка перейти на секретный роут при выключенном внешнем движке перенаправляет пользователя на главную страницу песочницы.