11. Покрытие API относительно Vue Router
SusRouter 1.0.16 — full API coverage comparison against Vue Router 4.
Покрытие: 27 из 27 ключевых API (100%) с оговорками — см. ниже.
Общая картина
| Категория | Статус |
|---|---|
| Ядро навигации (Push/Replace/Back/Forward/Go, стек, CurrentRoute) | ✅ 8/8 |
| Guard-пайплайн (BeforeEach, BeforeEnter, BeforeLeave, BeforeResolve, AfterEach, реентрантность) | ✅ 7/7 |
| Маршруты (динамические, именованные, вложенные, redirect, alias, meta, props, KeepAlive + LRU) | ✅ 10/10 |
| История (курсорный стек, go(n), forward, back) | ✅ 4/4 |
| Анимации (transition, slide, fade — реальные свойства transition UITK) | ✅ 3/3 |
| Модалки + затемнение (SusModalService) | ✅ 2/2 |
| Хелперы (router-link с [UxmlElement]+Text, active-link, beforeRouteUpdate с глобальными guard'ами) | ✅ 5/5 |
| Оптимизация (lazy loading, KeepAlive LRU) | ✅ 2/2 |
Оговорка: вложенные маршруты — только вложенность URL, без layout-обёртки или вложенного
<router-view>. Async guard'ы — пока синхронные (TODO).
Фаза A — базовая навигация ✅
A.1 router.go(n) и router.forward()
Курсорная история с _historyIndex. Push обрезает хвост forward. CanGoBack / CanGoForward.
A.2 beforeRouteUpdate
Обновление params на том же маршруте без пересоздания экрана.
A.3 router-link / active-link
SusRouteLink — декларативная навигация с классами router-link-active / router-link-exact-active. IsRouteActive / IsRouteActiveExact.
Фаза B — улучшения DX ✅
B.1 Именованные маршруты
PushNamed / ReplaceNamed / ResolvePath. Словарь _namedRoutes. SusRouteConfig.Name.
B.2 Вложенные маршруты
SusRouteConfig.Children. Конкатенация путей. SusRouteRecord.Parent. Resolve по имени.
B.3 Redirect и alias
SusRouteConfig.Redirect / Alias. _aliasMap для быстрого поиска. Redirect обрабатывается в Navigate.
Фаза C — приятные дополнения ✅
C.1 beforeResolve
Глобальный guard. Вызывается ДО BeforeEnter/создания экрана (шаг 5.5 в NavigateCore, до Activator.CreateInstance). При отмене нет побочных эффектов от уже созданного экрана.
C.2 Query-параметры
Парсинг ?key=val&key2=val2. SusRoute.Query — Dictionary<string, string>. Resolve и IsRouteActive игнорируют query. IsRouteActiveExact — точное совпадение.
C.3 Lazy loading
SusRouteConfig.LazyFactory — Func<SusScreen>. Register допускает null screenType. Вызывается один раз.
Итог
| Фаза | Задачи | Статус |
|---|---|---|
| Фаза A — базовая навигация | 3 | ✅ |
| Фаза B — улучшения DX | 3 | ✅ |
| Фаза C — приятные дополнения | 3 | ✅ |
| Итого | 9 | ✅ 100% |