11. 相对 Vue Router 的 API 覆盖
SusRouter 1.0.16 — full API coverage comparison against Vue Router 4.
覆盖率:27 项关键 API 中的 27 项(100%),有一些注意事项 — 见下文。
总体情况
| 类别 | 状态 |
|---|---|
| 导航核心(Push/Replace/Back/Forward/Go、stack、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 — 真实的 UITK transition 属性) | ✅ 3/3 |
| 模态框 + 遮罩(SusModalService) | ✅ 2/2 |
| 辅助工具(带 [UxmlElement]+Text 的 router-link、active-link、带全局 guard 的 beforeRouteUpdate) | ✅ 5/5 |
| 优化(惰性加载、KeepAlive LRU) | ✅ 2/2 |
注意事项: 嵌套路由 — 仅支持 URL 层面的嵌套,没有 layout wrapper 或嵌套的
<router-view>。异步 guard — 目前是同步的(TODO)。
阶段 A — 核心导航 ✅
A.1 router.go(n) 与 router.forward()
基于 _historyIndex 的游标历史。Push 会截断前进方向的尾部。CanGoBack / CanGoForward。
A.2 beforeRouteUpdate
在同一路由上更新 params,而不重新创建 screen。
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/screen 创建之前调用(NavigateCore 中的第 5.5 步,在 Activator.CreateInstance 之前)。中止时不会留下已创建 screen 的副作用。
C.2 Query 参数
解析 ?key=val&key2=val2。SusRoute.Query — Dictionary<string, string>。Resolve 和 IsRouteActive 会忽略 query。IsRouteActiveExact — 精确匹配。
C.3 惰性加载
SusRouteConfig.LazyFactory — Func<SusScreen>。Register 允许 screenType 为 null。只调用一次。
总结
| 阶段 | 任务 | 状态 |
|---|---|---|
| 阶段 A — 核心导航 | 3 | ✅ |
| 阶段 B — DX 改进 | 3 | ✅ |
| 阶段 C — 锦上添花 | 3 | ✅ |
| 总计 | 9 | ✅ 100% |