应使用 beforeResolve 守卫统一执行组件 asyncData 方法,通过 Promise.all 等待全部完成后再 next();组件需导出标准 asyncData 接口,配合校验、AbortController 取消、超时及 store 缓存实现数据与视图同步就绪。

关键不是“等跳转完再加载”,而是把请求塞进导航流程里——让路由确认前数据就位。用 beforeResolve 守卫最稳妥,它卡在组件解析完成、但还没挂载的时机,天然支持等待多个 asyncData 执行完毕。
守卫选 beforeResolve,别用 beforeEach
beforeEach 不等异步,只能手动控制 next(),容易写错或漏 await;beforeResolve 是 Vue Router 专为“等数据”设计的钩子,触发时目标组件已解析,asyncData 方法可被可靠识别和调用。
- 在守卫里收集所有目标组件中定义的
asyncData方法 - 统一传入 { store, route },执行 Promise.all 等待全部完成
- 全部 resolve 后再调用 next(),确保视图和数据同步就绪
组件必须暴露标准 asyncData 接口
不能每个页面自己写 fetch,要统一契约:导出一个静态函数,只负责发请求、存 store,不操作 DOM。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 示例:
export const asyncData = ({ store, route }) => store.dispatch('loadPost', route.params.id) - 该方法需与 SSR 环境参数一致(如服务端也传 route、store),否则客户端和服务端行为会不一致
- 组件内部 setup 或 mounted 直接读 store,不再重复请求
加校验、超时和取消机制
预取不是盲目发起,得防错、防卡、防浪费。
- ID 参数必须校验:非空、格式合法(如数字 / UUID),非法则 next({ name: '404' })
- 用 AbortController 绑定请求,一旦用户中途跳走,自动 abort 当前请求
- 对大体积或低优先级数据设 8s 超时,超时后仍调用 next(),避免阻塞主流程
配合 store 缓存,实现“即用即显”
预取的数据必须能被组件立刻读到,否则还是白忙。
- 存 store 时用唯一 key,比如
post:${id},避免不同 ID 数据覆盖 - 错误状态也要缓存(如 error: 'not found'),组件可据此显示重试按钮或离线提示
- 组件内不判断 loading,只查 store 是否有有效数据;没有才 fallback 显示骨架屏


















