К содержимому

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 на том же маршруте без пересоздания экрана.

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.QueryDictionary<string, string>. Resolve и IsRouteActive игнорируют query. IsRouteActiveExact — точное совпадение.

C.3 Lazy loading

SusRouteConfig.LazyFactoryFunc<SusScreen>. Register допускает null screenType. Вызывается один раз.

Итог

ФазаЗадачиСтатус
Фаза A — базовая навигация3
Фаза B — улучшения DX3
Фаза C — приятные дополнения3
Итого9✅ 100%