当前位置: 首页 > news >正文

学习笔记:Vue Router 动态路由与参数匹配详解

题目重述

本文主要讲解 Vue Router 中的带参数的动态路由匹配机制,包括:

  • 动态参数的定义与使用(如 /users/:id

  • 多参数和自定义正则表达式的高级用法

  • 组件如何响应路由参数的变化

  • 404 路由捕获与通配符配置

  • 参数变化监听方式(组合式 API 和选项式 API)

详解

一、动态路由参数的基本语法

在 Vue Router 中,可以通过在路径中使用冒号 : 来定义动态段(参数)

const routes = [{ path: '/users/:id', component: User },
]

匹配示例:

  • /users/johnny$route.params.id = 'johnny'

  • /users/jolyne$route.params.id = 'jolyne'

✅ 特点:
  • 所有符合该模式的 URL 都会映射到同一个组件。

  • 参数值通过 $route.params 访问。

二、多参数路由匹配

可以在一个路径中定义多个动态参数:

{ path: '/users/:username/posts/:postId', component: PostDetail }
匹配路径route.params
/users/eduardo/posts/123{ username: 'eduardo', postId: '123' }

注意:每个 :参数名 对应一个字段,并自动填充到 route.params 对象中。

三、对参数变化做出反应

由于从 /users/a /users/b 同一组件复用,组件不会重新创建,因此:

生命周期钩子(如 created、mounted)不会再次触发

✅ 正确做法是监听 $route 变化:

方法一:使用 watch 监听参数变化(组合式 API)
<script setup>
import { watch } from 'vue'
import { useRoute } from 'vue-router'const route = useRoute()watch(() => route.params.id,(newId, oldId) => {console.log('用户ID已变更:', newId)// 执行数据加载等操作}
)
</script>
方法二:使用导航守卫 onBeforeRouteUpdate
<script setup>
import { onBeforeRouteUpdate } from 'vue-router'onBeforeRouteUpdate(async (to, from) => {userData.value = await fetchUser(to.params.id)
})
</script>

💡 优势:可在守卫中异步获取数据或阻止无效跳转。

四、捕获所有路由(404 处理)

为了处理不存在的页面,可以使用通配符路由

1. 捕获任意路径
{path: '/:pathMatch(.*)*',name: 'NotFound',component: NotFound
}
  • (.*)* 表示匹配任意字符(包括多级路径)

  • 匹配结果存于 route.params.pathMatch

示例:

  • /not/exist/path route.params.pathMatch = ['not', 'exist', 'path']

  • 或字符串形式:"not/exist/path"

2. 自定义正则表达式参数
{path: '/user-:afterUser(.*)',component: UserGeneric
}

匹配:/user-john, /user-admin-settings

五、编程式导航传参(保留结构)

当需要跳转到通配符路由并保持路径结构时:

router.push({name: 'NotFound',params: { pathMatch: route.path.substring(1).split('/') },query: route.query,hash: route.hash
})

⚠️ 注意:substring(1) 避免生成 // 开头的 URL

六、服务器配置提示(History 模式)

        若使用 createWebHistory 模式(无 #),必须确保后端服务器将所有前端路由请求指向 index.html,否则刷新会导致 404。

常见配置:

  • Nginx: 添加 try_files $uri $uri/ /index.html;

  • Node.js (Express): 使用中间件 fallback 到 index.html

图表示意:动态路由匹配逻辑流程图

总结要点

功能实现方式注意事项
动态参数/users/:id参数通过 $route.params.id 获取
多参数/a/:x/b/:y自动生成对应字段对象
参数监听watch(route.params) 或 onBeforeRouteUpdate生命周期钩子不触发!
通配符路由/:pathMatch(.*)*用于 404 页面
编程式导航传参params: { pathMatch: [...] }防止双斜杠问题
History 模式createWebHistory()需服务器支持

知识点

  • 动态路由参数:通过 :param 定义,匹配后可通过 $route.params 访问,适用于用户详情等场景。

  • 参数变化监听:组件复用时不触发生命周期,需用 watch onBeforeRouteUpdate 响应变化。

  • 通配符与正则匹配:使用 (.*)* 实现全路径捕获,用于 404 页面或灵活路由设计。

http://www.dtcms.com/a/465895.html

相关文章:

  • seo怎样新建网站wordpress 底部模板
  • 高性能场景推荐使用PostgreSQL
  • 用一颗MCU跑通7B大模型:RISC-V+SRAM极致量化实战
  • 前端开发框架全景解析:从演进到实践与未来趋势
  • 葫芦岛做网站百度经验发布平台
  • 做网站找合作伙伴南昌网站建设精英
  • (二)deepseek控制机械臂-机械臂提示词设置测试
  • Blender概念抽象有机体模型资产生成器预设 Organic Generator V1.0附使用教程
  • Go语言实战:高并发服务器设计与实现
  • 数字化转型:概念性名词浅谈(第七十讲)
  • 云服务器安装最新版本的nodejs
  • 一键提交网站优质作文网站
  • csv excel
  • A* 工程实践全指南:从启发式设计到可视化与性能优化
  • Python+requests+excel 接口自动化测试框架
  • [Dify] 将外部数据库表或 Excel 转为知识库内容的最佳实践
  • SpringBoot实现数据脱敏
  • 基于JavaWeb的智慧养老院管理系统的设计与实现(代码+数据库+LW)
  • 网站建设项目执行情况报告模板北京海淀区
  • Qt:多文档模式开发
  • k8s集群环境下微服务项目性能实战(单接口)
  • 5分钟了解k8s pod通信原理--图文篇
  • 静态网页素材泉州seo优化排名公司
  • 建设银行网站上改手机东莞市常平东部中心医院
  • MySQL索引优化实战从慢查询到高性能的蜕变之路
  • Java中的Hook机制
  • MATLAB实现FCM和KFCM聚类算法
  • 讲述做网站的电影网站圣诞问候特效
  • 想在拼购网站做产品罗湖网站开发
  • 贝叶斯结合LSTM用于市场预测,准确性达新高度!