动态路由 meta 通过运行时注入实现:基础路由仅设占位 meta,后端提供页面配置接口,路由守卫中异步拉取并合并至 to.meta,组件内监听变化更新标题、seo 和权限校验。

路由 meta 元信息不能在初始路由配置中直接“动态”写死,但可以通过「运行时注入」方式实现真正意义上的动态设置——核心思路是:先定义基础路由骨架,再根据后端返回的页面配置数据,动态补充或覆盖每个路由的 meta 字段。
1. 基础路由只留占位,不硬编码 meta
避免在 routes.js 中为每个路由写死 title、roles、keywords 等字段。改用统一占位结构:
- 路径和组件保持固定,如
path: '/page/:id'、component: PageView -
meta仅保留必要标识,例如{ dynamic: true, pageKey: '' } - 所有真实元信息(标题、权限、SEO)由后端接口按需返回,不写在前端路由文件里
2. 后端提供页面配置接口(关键依赖)
设计一个标准接口,例如 GET /api/v1/page-config?path=/dashboard,返回结构类似:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
{
"title": "销售看板",
"roles": ["admin", "sales"],
"keywords": "销售数据,实时报表",
"description": "查看团队月度成交趋势与TOP客户分布",
"hiddenInMenu": false,
"icon": "chart-line"
}
- 该接口应支持按当前访问路径(或路由 name)精准返回对应配置
- 建议带缓存控制(如 ETag 或 max-age),避免重复请求
- 权限字段(如
roles)需与用户登录态中的角色列表对齐,用于守卫判断
3. 路由守卫中异步注入 meta
在全局前置守卫 router.beforeEach 中拦截带有 dynamic: true 的路由,拉取配置并挂载到 to.meta:
- 若已缓存过该路径的配置,直接使用;否则发起请求
- 请求成功后,用返回数据深合并到
to.meta,覆盖占位值 - 失败时可 fallback 到默认标题或跳转 404 页面,避免白屏
- 注意:不要修改原始路由记录(
router.options.routes),只影响当前导航对象to
4. 组件内和布局中安全读取动态 meta
由于 meta 是异步注入的,组件中不能直接在 setup() 同步读取完整 meta。推荐做法:
- 在布局组件(如
DefaultLayout.vue)中用useRoute()+watch监听route.meta.title变化,更新页面标题和菜单项 - SEO 相关字段(
metaInfo)配合vue-meta或unhead,在onBeforeRouteUpdate钩子中触发更新 - 权限判断统一走
to.meta.roles,结合store.state.user.roles做校验,未通过则next('/403')
这种方式把页面元信息完全交给后端管理,前端只负责加载与渲染逻辑,适合多租户、运营后台、CMS 类系统。不复杂但容易忽略缓存和错误兜底。








