Vue3 路由配置与跳转传参完整指南

目录

一、路由配置

1. 基本路由配置

2. 动态路由配置

3. 可选参数配置

二、路由跳转与传参

1. 声明式导航 (模板中)

2. 编程式导航 (JavaScript中)

三、参数接收

1. 接收动态路由参数

2. 接收查询参数

3. 监听参数变化

四、高级用法

1. 路由元信息

2. 路由守卫控制

3. 动态添加路由

五、完整示例

路由配置示例

组件使用示例


一、路由配置

1. 基本路由配置

// router/index.js
import { createRouter, createWebHistory } from 'vue-router'const routes = [{path: '/',name: 'Home',component: () => import('@/views/Home.vue')},{path: '/about',name: 'About',component: () => import('@/views/About.vue')}
]const router = createRouter({history: createWebHistory(),routes
})export default router

2. 动态路由配置

const routes = [// 动态段以冒号开始{path: '/user/:id',name: 'User',component: () => import('@/views/User.vue')},// 多个动态参数{path: '/post/:postId/comment/:commentId',name: 'PostComment',component: () => import('@/views/PostComment.vue')}
]

3. 可选参数配置

{path: '/user/:id?',  // 问号表示可选name: 'UserOptional',component: () => import('@/views/UserOptional.vue')
}

二、路由跳转与传参

1. 声明式导航 (模板中)

<!-- 基本跳转 -->
<router-link to="/about">关于我们</router-link><!-- 动态路由传参 -->
<router-link :to="'/user/' + userId">用户主页</router-link>
<router-link :to="{ name: 'User', params: { id: userId } }">用户主页</router-link><!-- 查询参数传参 -->
<router-link :to="{ path: '/search', query: { keyword: 'vue' } }">搜索</router-link>

2. 编程式导航 (JavaScript中)

import { useRouter } from 'vue-router'const router = useRouter()// 1. 动态路由传参
router.push('/user/123')  // 路径方式
router.push({ name: 'User', params: { id: 123 } })  // 命名路由方式// 2. 查询参数传参
router.push({path: '/search',query: {keyword: 'vue',page: 1}
})// 3. 替换当前路由 (不保留历史记录)
router.replace({ path: '/login' })// 4. 前进/后退
router.go(1)  // 前进
router.go(-1) // 后退

三、参数接收

1. 接收动态路由参数

import { useRoute } from 'vue-router'const route = useRoute()// 接收单个参数
const userId = route.params.id// 接收多个参数
const postId = route.params.postId
const commentId = route.params.commentId// 可选参数处理
const optionalId = route.params.id || 'default'

2. 接收查询参数

import { useRoute } from 'vue-router'const route = useRoute()// 获取查询参数
const keyword = route.query.keyword
const page = Number(route.query.page) || 1  // 带类型转换和默认值// 处理数组参数 (如 ?tags=vue&tags=js)
const tags = Array.isArray(route.query.tags) ? route.query.tags : [route.query.tags].filter(Boolean)

3. 监听参数变化

import { watch } from 'vue'
import { useRoute } from 'vue-router'const route = useRoute()// 监听动态参数变化
watch(() => route.params.id,(newId) => {console.log('用户ID变化:', newId)fetchUserData(newId)}
)// 监听查询参数变化
watch(() => route.query,(newQuery) => {console.log('查询参数变化:', newQuery)},{ deep: true }
)

四、高级用法

1. 路由元信息

// 路由配置
{path: '/admin',name: 'Admin',component: () => import('@/views/Admin.vue'),meta: {requiresAuth: true,role: 'admin'}
}// 组件中获取
const route = useRoute()
const requiresAuth = route.meta.requiresAuth

2. 路由守卫控制

router.beforeEach((to, from, next) => {if (to.meta.requiresAuth && !isAuthenticated()) {next({path: '/login',query: { redirect: to.fullPath }})} else {next()}
})

3. 动态添加路由

// 添加单个路由
router.addRoute({path: '/new-route',name: 'NewRoute',component: () => import('@/views/NewRoute.vue')
})// 添加嵌套路由
router.addRoute('Admin', {path: 'settings',name: 'AdminSettings',component: () => import('@/views/AdminSettings.vue')
})

五、完整示例

路由配置示例

// router/index.js
import { createRouter, createWebHistory } from 'vue-router'const routes = [{path: '/',name: 'Home',component: () => import('@/views/Home.vue')},{path: '/product/:id',name: 'Product',component: () => import('@/views/Product.vue'),props: true // 将params作为props传递},{path: '/search',name: 'Search',component: () => import('@/views/Search.vue')},{path: '/login',name: 'Login',component: () => import('@/views/Login.vue'),meta: {guestOnly: true}}
]const router = createRouter({history: createWebHistory(),routes
})// 全局路由守卫
router.beforeEach((to, from, next) => {const isAuth = localStorage.getItem('token')if (to.meta.guestOnly && isAuth) {next({ name: 'Home' }) // 已登录用户不能访问登录页} else {next()}
})export default router

组件使用示例

<script setup>
import { useRouter, useRoute } from 'vue-router'
import { onMounted, watch } from 'vue'const router = useRouter()
const route = useRoute()// 编程式导航
const navigateToProduct = (id) => {router.push({name: 'Product',params: { id },query: { from: 'home' }})
}// 接收参数
const productId = route.params.id
const searchQuery = route.query.q// 监听参数变化
watch(() => route.params.id,(newId) => {console.log('产品ID变化:', newId)fetchProduct(newId)}
)// 接收props形式的参数 (需要路由配置 props: true)
const props = defineProps({id: String
})
</script><template><div><!-- 声明式导航 --><router-link :to="{ name: 'Product', params: { id: 123 }, query: { from: 'home' } }">产品123</router-link><!-- 编程式导航按钮 --><button @click="navigateToProduct(456)">查看产品456</button><!-- 显示当前路由参数 --><p>当前产品ID: {{ productId }}</p><p v-if="route.query.q">搜索词: {{ searchQuery }}</p></div>
</template>

总结

  1. 路由配置:使用 createRouter 创建路由,createWebHistory 创建历史模式

  2. 动态路由:使用 :param 语法定义动态段

  3. 跳转方式

    • 声明式:<router-link>

    • 编程式:router.push()/router.replace()

  4. 传参方式

    • 动态参数:params

    • 查询参数:query

  5. 参数接收:使用 useRoute() 获取当前路由信息

  6. 高级功能:路由守卫、元信息、动态路由添加等

按照这些方法,可以灵活地在 Vue3 项目中实现各种路由需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/904807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vibe Coding: 优点与缺点

如果你最近在开发圈子里,你很可能听说过这个新趋势"vibe coding"(氛围编程)。 我只能说我对此感受复杂。以下是原因。 优势 在构建新项目时,靠着氛围编程达到成功感觉很自由!但对于遗留代码来说情况就不同了,尽管也不是不可能。 实时反馈和快速迭代 Cursor(…

7:点云处理—眼在手外标定

1.制作模板 dev_update_off ()dev_set_color (green)dev_close_window ()WindowHeight:740WindowWidth :740dev_open_window(0, 0, 540, 540, black, WindowHandle)Instruction : [Rotate: Left button,Zoom: Shift left button,Move: Ctrl left button]read_object_mod…

AI赋能智能客服革新:R²AIN SUITE 如何破解医疗行业服务难题?

一、什么是智能客服&#xff1f; 智能客服是基于人工智能技术&#xff08;AI&#xff09;的客户服务解决方案&#xff0c;通过自然语言处理&#xff08;NLP&#xff09;、机器学习、大模型等核心技术&#xff0c;实现多模态交互、自动化应答、知识库管理、流程优化等功能。其核…

(undone) MIT6.S081 Lec17 VM for APP 学习笔记

url: https://mit-public-courses-cn-translatio.gitbook.io/mit6-s081/lec17-virtual-memory-for-applications-frans/17.1-ying-yong-cheng-xu-shi-yong-xu-ni-nei-cun-suo-xu-yao-de-te-xing 17.1 应用程序使用虚拟内存所需要的特性 今天的话题是用户应用程序使用的虚拟内存…

使用 OpenSSL 吊销 Kubernetes(k8s)的 kubeconfig 里的用户证书

一.用 OpenSSL 依据已有的自签名 CA 注销签发的证书的步骤 1. 准备工作 你得有自签名 CA 的私钥&#xff08;通常是 .key 文件&#xff09;、CA 证书&#xff08;通常是 .crt 文件&#xff09;以及证书吊销列表&#xff08;CRL&#xff09;文件。若还没有 CRL 文件&#xff0c…

循环卷积(Circular Convolutions)

最近看论文发现了一个叫循环卷积的东西&#xff0c;这里学习并记录一下&#xff0c;方便以后查阅。 循环卷积&#xff08;Circular Convolutions&#xff09; 循环卷积&#xff08;Circular Convolutions&#xff09;1. 什么是循环卷积2. 数学定义关键点 3. 循环卷积与线性卷积…

【计算机视觉】Car-Plate-Detection-OpenCV-TesseractOCR:车牌检测与识别

Car-Plate-Detection-OpenCV-TesseractOCR&#xff1a;车牌检测与识别技术深度解析 在计算机视觉领域&#xff0c;车牌检测与识别&#xff08;License Plate Detection and Recognition, LPDR&#xff09;是一个极具实用价值的研究方向&#xff0c;广泛应用于智能交通系统、安…

MATLAB制作柱状图与条图:数据可视化的基础利器

一、什么是柱状图与条图&#xff1f; 柱状图和条图都是用来表示分类数据的常见图表形式&#xff0c;它们的核心目的是通过矩形的长度来比较各类别的数值大小。条图其实就是“横着的柱状图”&#xff0c;它们的本质是一样的&#xff1a;用矩形的长度表示数值大小&#xff0c;不同…

[计算机科学#13]:算法

【核知坊】&#xff1a;释放青春想象&#xff0c;码动全新视野。 我们希望使用精简的信息传达知识的骨架&#xff0c;启发创造者开启创造之路&#xff01;&#xff01;&#xff01; 内容摘要&#xff1a; 算法是解决问题的系统化步骤&#xff0c;不同的问题…

HTTP传输大文件的方法、连接管理以及重定向

目录 1. HTTP传输大文件的方法 1.1. 数据压缩 1.2. 分块传输 1.3. 范围请求 1.4. 多段数据 2. HTTP的连接管理 2.1. 短连接 2.2. 长连接 2.3. 队头阻塞 3. HTTP的重定向和跳转 3.1. 重定向的过程 3.2. 重定向状态码 3.3. 重定向的应用场景 3.4. 重定向的相关问题…

PostgreSQL 18 Beta 1发布,有哪些功能亮点?

PostgreSQL 全球开发组于 2025 年 5 月 8 日发布了第一个 PostgreSQL 18 Beta 版本&#xff0c;现已开放下载。虽然细节可能会有所改变&#xff0c;但是该版本包含了 PostgreSQL 18 最终正式版中所有新功能的预览。 以下是 PostgreSQL 18 引入的部分关键功能亮点。 性能优化 …

vue dev-tools插件

背景 在项目上用到vue技术&#xff0c;在bilibili上学习vue&#xff0c;期间老师推荐使用vue dev-tools调试神器&#xff0c;所以过来安转和使用了&#xff0c;用了感觉不错&#xff0c;希望给大家带来效率的提升。 定义 Vue DevTools 是一款旨在增强 Vue 开发者体验的工具&am…

单片机-FLASH软件模拟EEPROM,提升flash保存重要参数的使用寿命

目录 1. FLASH和EEPROM读写数据的对比   2. FLASH模拟EEPROM的原理   3. FLASH模拟EEPROM的优点   4. 实战项目工程代码 1. FLASH和EEPROM读写数据的对比 1.1 擦除操作 EEPROM通常支持按单字节擦除和写入&#xff0c;这一特性使其非常适合需要频繁更新小量数据的应…

探索Stream流:高效数据处理的秘密武器

不可变集合 stream流 Stream流的使用步骤&#xff1a; 先得到一条Stream流&#xff08;流水线&#xff09;&#xff0c;并把数据放上去 使用中间方法对流水线上的数据进行操作 使用终结方法对流水线上的数据进行操作 Stream流的中间方法 注意1&#xff1a;中间方法&#xff0…

vue3笔记(自存)

1. Vue3简介 2020年9月18日&#xff0c;Vue.js发布版3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;n 经历了&#xff1a;4800次提交、40个RFC、600次PR、300贡献者 官方发版地址&#xff1a;Release v3.0.0 One Piece vuejs/core 截止2023年10月&#xff0c;最…

实验4 mySQL查询和视图

一、实验目的 掌握SELECT语句的基本语法多表连接查询GROUP BY的使用方法。ORDER BY的使用方法。 二、实验步骤、内容、结果 实验内容&#xff1a; 实验4.1数据库的查询 目的与要求 (1)掌握SELECT语句的基本语法。 (2)掌握子查询的表示。 (3)掌握连接查询的表示。 (4)掌…

【bug】fused_bias_act_kernel.cu卡住没反应

简述 在推理人脸修复face restoration算法 GPEN的时候&#xff0c;发现有时候fused_bias_act_kernel.cu卡住没反应。 解决 清理下缓存&#xff0c;让程序自己再编译下

.net/C#进程间通信技术方案总结

C# 应用进程间通信(IPC)技术方案 进程间通信(Inter-Process Communication, IPC)是不同进程之间交换数据和消息的机制。以下是C#中常用的IPC技术方案&#xff1a; 1. 命名管道(Named Pipes) 适用于本地机器上的进程通信&#xff0c;支持双向通信。 ​​服务端示例​​&…

阿里云服务器数据库故障排查指南?

阿里云服务器数据库故障排查指南? 以下是针对阿里云服务器&#xff08;如ECS自建数据库或阿里云RDS等托管数据库&#xff09;的故障排查指南&#xff0c;涵盖常见问题的定位与解决方案&#xff1a; 一、数据库连接失败 检查网络连通性 ECS自建数据库 确认安全组规则放行数据库…

深度学习 ———— 迁移学习

迁移学习原理 什么是迁移学习&#xff1f; 迁移学习利用在大规模数据集&#xff08;如ImageNet&#xff09;上预训练的模型&#xff0c;改装小数据集&#xff08;如CIFAR-10&#xff09;。优势&#xff1a; 减少训练时间&#xff1a;预训练模型已学习通用特征&#xff08;如边…