Vue3(三)路由基本使用、工作模式(history,hash)、query传参和param传参、props配置、编程式路由导航
文章目录
- 一、路由的基本使用
- 二、路由器的工作模式
- 三、RouterLink中to的两种写法
- 四、嵌套路由
- 五、路由传参
- 1. query传参
- 2. params传参
- 六、路由的propos配置
- 七、编程式路由导航
一、路由的基本使用
-
安装:
npm i vue-router -
在
src/pages文件下,创建三个路由组件(Home\About\News,具体内容不写了) -
创建路由器(
src/routers/index.ts)// 创建一个路由器并暴露出去 // 1. 引入createRouter import { createRouter,createWebHistory } from "vue-router";// 2. 引入路由组件 import Home from '../pages/Home.vue' import About from '../pages/About.vue' import News from '../pages/News.vue'// 3. 创建一个路由器 const router = createRouter({history:createWebHistory(), // 必须指定路由工作模式routes:[// 重定向,不加重定向,会报警告 No match found for location with path "/"{path:'/',redirect:'/home'},// 通过name属性,给路由命名{name:'/shouye',path:'/home',component:Home},{name:'xinwen',path:'/news',component:News},{name:'guanyu',path:'/about',component:About}] }) export default router -
main.ts中引入路由器// 引入createApp用于创建应用 import { createApp } from "vue" // 引入App根组件 import App from "./App.vue" // 引入路由器 import router from './router' // 创建一个应用 const app = createApp(App) // 使用路由器 app.use(router) // 挂载整个应用到app容器中 app.mount("#app") -
App组件中使用路由组件
RouterLink和RouterView的作用与vue2中的router-link,router-view的作用一样。
active-class绑定组件激活时的样式。当组件激活时(active的样式还是要自己写),会自动添加样式active<template><div class="app"><h2 class="title">Vue路由测试</h2><!-- 导航区 --><div class="navigate"><RouterLink to="/home" active-class="active">首页</RouterLink><RouterLink to="/news" active-class="active">新闻</RouterLink><RouterLink to="/about" active-class="active">关于</RouterLink></div><!-- 展示区 --><div class="main-content"><RouterView></RouterView></div></div> </template> <script lang="ts" setup name="App"> import { RouterLink, RouterView } from 'vue-router' </script> <style>.navigate a.active {background-color: #64967E;color: #ffc268;font-weight: 900;text-shadow: 0 0 1px black;font-family: 微软雅黑; } </style>
- 路由组件通常存放在
pages或views文件夹,一般组件通常存放在components文件夹。- 点击首页,首页组件挂载,展示首页组件内容。再点击新闻,新闻组件挂载并显示该组件内容。首页组件则默认被卸载(onUnmounted)
- 重定向: 将特定的路径,重新定向到已有路由。否则页面一打开,路径是
/,不对应任何路由组件,页面会空白- 通过name属性,给路由命名
二、路由器的工作模式
与vue2中的工作模式一样,就是设置模式的方式不一样;Vue(十三) 路由器的两种工作模式
-
history模式优点:
URL更加美观,不带有#。缺点:后期项目上线,需要服务端配合处理路径问题,否则刷新会有
404错误。const router = createRouter({history:createWebHistory(), //history模式/******/ }) -
hash模式优点:兼容性更好,因为不需要服务器端处理路径。
缺点:
URL带有#不太美观,且在SEO优化方面相对较差。const router = createRouter({history:createWebHashHistory(), //hash模式/******/ })
三、RouterLink中to的两种写法
<!-- 字符串写法 -->
<RouterLink to="/about" active-class="active">关于</RouterLink>
<!-- 对象写法 -->
<RouterLink :to="{ path: '/about' }" active-class="active">关于</RouterLink>
<RouterLink :to="{ name: '/guanyu' }" active-class="active">关于</RouterLink>
四、嵌套路由

- 创建路由组件
Detail.vue - 配置路由规则
src/router/index.ts
{name:'xinwen',path:'/news',component:News,children:[{name:'xiangqing'path:'detail', // 注意这里不用加'/'component:Detail}]},
News组件:
<template><!-- 新闻 --><div class="news"><ul><li v-for=" n in news" :key="n.id"><RouterLink :to="'/news/detail'">{{ n.title }}</RouterLink></li></ul><!-- 展示区 --><div class="news-content"><RouterView></RouterView></div></div>
</template>
五、路由传参
无论点击展示区的哪个title,右边详情区的内容应该展示对应的信息。
1. query传参
传参的两种形式:
<!--src/pages/News.vue-->
<ul><li v-for=" n in news" :key="n.id"><!-- 第一种,字符串,用?拼接query参数 --><RouterLink :to="`/news/detail?id=${n.id}&title=${n.title}&content=${n.content}`">{{ n.title }}</RouterLink><!-- 第二种,对象写法 --><RouterLink :to="{path: '/news/detail',query: {id: n.id,title: n.title,content: n.content}}">{{ n.title }}</RouterLink></li>
</ul>
Detail组件接收参数
<template><ul class="news-list"><li>编号:{{ query.id }}</li><li>标题:{{ query.title }}</li><li>内容:{{ query.content }}</li></ul>
</template>
<script setup lang="ts" name="About">import { useRoute } from 'vue-router'import { toRefs } from 'vue'// 获取route信息let route = useRoute()console.log(route);// 解构出来不是响应式数据,需要通过toRefs将其转为响应式数据let { query } = toRefs(route)
</script>
可以看出route是个响应式数据

2. params传参
(1). 传递参数
params传参的两种写法
<ul><li v-for=" n in news" :key="n.id"><!-- 第一种,字符串 --><RouterLink :to="`/news/detail/${n.id}/${n.title}/${n.content}`">{{ n.title }}</RouterLink> <!-- 第二种, 对象写法,注意不可用path,需要用name属性指定路由 --><RouterLink :to="{name: 'xiangqing',params: {id: n.id,title: n.title,content: n.content}}">{{ n.title }}</RouterLink></li>
</ul>
需要提前占位,因为params参数属于路径的一部分。如果没占位,假设路径为:/news/detail/123/title/content;路由中没有这样的路径,就会报错。
{name:'xinwen',path:'/news',component:News,children:[{name:'xiangqing',path:'detail/:id/:title/:content?',component:Detail}]},
?表示content这个参数可传可不传。
(2). 读取参数

注意点1:传递
params参数时,若使用to的对象写法,必须使用name配置项,不能用path。
注意点2:传递params参数时,需要提前在规则中占位。
六、路由的propos配置
这个在vue2中也说过。
propos属性的作用是少写重复项,让路由组件更方便的接收到参数。
Vue(十三) 路由器的propos配置
(1) 写法一: props:true,
{name:'xinwen',path:'/news',component:News,children:[{name:'xiangqing',path:'detail/:id/:title/:content?',component:Detail,// 第一种写法,将路由收到的所有params参数传递给Detail组件.props:true,}]},
只适用于params参数,props:true时相当于这样传递参数:
<Detail id=xxx title=xxx content=xxx>
(2) 写法二:函数式写法
children:[{name:'xiangqing',path:'detail',component:Detail,// 第二种写法,函数写法,传递params参数或者props参数props(route){return route.query}}]
(3) 写法三:固定值,不推荐
props:{id:123,title:'tom',content:'tom and jerry'}
七、编程式路由导航
路由组件的两个重要的属性:$route和$router变成了两个hooks。
import { useRouter } from 'vue-router'
let router = useRouter()
// pushAPI,追加历史记录router.push({name: 'xiangqing',query: {id: n.id,title: n.title,content: n.content}})// replace,替换当前历史记录router.replace({... })
push里的值可声明式导航RouterLink里的to属性值一致。to的值可以怎么写,push等API里就可以怎么写。
相关文章:
Vue3(三)路由基本使用、工作模式(history,hash)、query传参和param传参、props配置、编程式路由导航
文章目录 一、路由的基本使用二、路由器的工作模式三、RouterLink中to的两种写法四、嵌套路由五、路由传参1. query传参2. params传参 六、路由的propos配置七、编程式路由导航 一、路由的基本使用 安装:npm i vue-router 在src/pages文件下,创建三个路…...
TypeScript概念讲解
简单来说,TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准; TypeScript 由微软开发的自由和开源的编程语言; TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 Jav…...
C++ | Leetcode C++题解之第437题路径总和III
题目: 题解: class Solution { public:unordered_map<long long, int> prefix;int dfs(TreeNode *root, long long curr, int targetSum) {if (!root) {return 0;}int ret 0;curr root->val;if (prefix.count(curr - targetSum)) {ret pref…...
回复《对话损友 2》
回复《对话损友 2》 承蒙贵人挂念,亦感激贵人给予这般交流的契机(对话损友 2 -- 回复-CSDN博客)。我自身也一直期望能留存些岁月的痕迹,然而却常困惑于不知哪些事物值得铭记,哪些又应被永远忘却。 随着时光流转&#x…...
MySQL - 运维篇
一、日志 1. 错误日志 2. 二进制日志 3. 查询日志 记录了所有的增删改查语句以及DDL语句 4. 慢查询日志 二、主从复制 1. 概述 2. 原理 3. 搭建 三、分库分表 1. 介绍 2. Mycat概述 3. Mycat入门 4. Mycat配置 5. Mycat分片 6. Mycat管理及监控 四、读写分离 1. 介绍 2. 一…...
WebGIS开发及市面上各种二三维GIS开发框架对比分析
GIS前端开发是现代WebGIS应用开发中非常重要的一环,通过前端开发框架,可以实现地图展示、交互、分析等功能。本文将介绍当前市面上常用的GIS前端开发框架,并进行对比分析。 Leaflet Leaflet是一款轻量级的开源地图库,它提供了丰…...
[论文精读]TorWard: Discovery, Blocking, and Traceback of Malicious Traffic Over Tor
期刊名称:IEEE Transactions on Information Forensics and Security 发布链接:TorWard: Discovery, Blocking, and Traceback of Malicious Traffic Over Tor | IEEE Journals & Magazine | IEEE Xplore 中文译名:TorWard:…...
pytest - 多线程提速
import timedef test1_test1():time.sleep(1)assert 1 1, "11"def test1_test2():time.sleep(1)assert 1 1, "11" 上面2个函数,执行情况: 正常执行时,花费 2.08s2个进程执行时,花费 1.18s2个线程执行时&a…...
python中logging的用法
logging.error 是 Python logging 模块中的一个方法,专门用于记录错误级别(ERROR)的日志信息。logging 模块是 Python 提供的标准日志工具,用于生成各种级别的日志消息,并支持日志的格式化和存储。 logging.error 的基…...
【YOLO目标检测车牌数据集】共10000张、已标注txt格式、有训练好的yolov5的模型
目录 说明图片示例 说明 数据集格式:YOLO格式 图片数量:10000(2000张绿牌、8000张蓝牌) 标注数量(txt文件个数):10000 标注类别数:1 标注类别名称:licence 数据集下载:车牌数据…...
gdb xterm 调试 openmpi 程序
1,编写编译一个openmpi程序 迭代计算 PI 的源程序: pi_reduce.c #include <stdio.h>#include <math.h> #include <mpi.h>double f(double); double f(double x) {return (4.0/(1.0x*x)); }int main(int argc, char* argv[]) {int d…...
【STM32】江科大STM32笔记汇总(已完结)
STM32江科大笔记汇总 STM32学习笔记课程简介(01)STM32简介(02)软件安装(03)新建工程(04)GPIO输出(05)LED闪烁& LED流水灯& 蜂鸣器(06)GPIO输入(07)按键控制LED 光敏传感器控制蜂鸣器(08)OLED调试工具(09)OLED显示屏(10)EXTI外部中断(11)对射式红外传感器计次 旋转编码器…...
Java基础扫盲(二)
想看Java基础扫盲(一)的可以观看我的上篇文章Java基础扫盲 目录 String为什么设计为不可变的 String有长度限制吗 为什么JDK9将String的char[]改为byte[] 泛型中K,T,V,E,Object,?等都代表什么含义 怎么修改一个类中使用了private修饰的String类型…...
兼容React的刮刮乐完整代码实现
需要兼容React的刮刮乐完整代码实现 在现代Web开发中,React作为一种流行的前端框架,为开发者提供了构建动态界面的强大工具。刮刮乐效果作为一种趣味性的用户交互,能够显著提升用户体验和参与度。本文将详细介绍如何在React项目中实现一个兼…...
PHP程序如何实现限制一台电脑登录?
PHP程序如何实现限制一台电脑登录? 可以使用以下几种方法: 1. IP地址限制:在PHP中,可以通过获取客户端的IP地址,然后与允许登录的IP地址列表进行比对。如果客户端的IP地址不在列表中,就禁止登录。 “php $…...
nodejs fs 模块的简介与相关案例
fs 文件系统模块 什么是 fs 文件系统模块? fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作要求。* 例如: fs.readFile() 方法用来读取文件内容。fs.writeFile() 方法用来写入文…...
计算机毕业设计 基于Flask+Vue的博客系统 Python毕业设计 前后端分离 附源码 讲解 文档
🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...
基于SSH的酒店管理系统的设计与实现 (含源码+sql+视频导入教程)
👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSH的酒店管理系统拥有两种角色 管理员:房间管理、房型管理、客户管理、预定管理、入住管理(到店入住、预定入住、正在入住)、账单管理、会员管理…...
消息队列10:为RabbitMq添加连接池
环境: win11rabbitmq-3.8.17.net 6.0RabbitMQ.Client 6.8.1vs2022 安装RabbitMq环境参照: window下安装rabbitmqlinux下安装rabbitmq 问题:rabbitmq的c#客户端没有自带连接池,所以需要手动实现。 简易实现如下: usi…...
在使用 Docker 时,用户可能会遇到各种常见的错误和问题
在使用 Docker 时,用户可能会遇到各种常见的错误和问题。以下是一些需要注意的常见错误及其可能的解决方案: 1. 权限问题 在 Linux 系统上运行 Docker 命令时,可能会遇到权限不足的问题。解决这个问题通常有两种方法: 使用 sud…...
告别裸机!用状态机思路重构你的51单片机温度监测程序(以DS18B20为例)
告别裸机!用状态机思路重构你的51单片机温度监测程序(以DS18B20为例) 在嵌入式开发中,51单片机因其简单易用、成本低廉而广受欢迎。但当项目复杂度上升时,传统的"while循环延时"式代码往往会陷入维护噩梦——…...
计算机毕业设计springboot英语学习网站 基于SpringBoot的在线英语教育平台设计与实现 SpringBoot框架下的智能化英语辅助学习系统开发
计算机毕业设计springboot英语学习网站3i8387gp (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。全球化时代对英语能力的需求日益增长,信息技术在教育领域的广泛应用推…...
怎样快速管理Windows预览版:离线注册工具完整使用手册
怎样快速管理Windows预览版:离线注册工具完整使用手册 【免费下载链接】offlineinsiderenroll 项目地址: https://gitcode.com/gh_mirrors/of/offlineinsiderenroll 想要体验Windows最新功能但又不想绑定微软账户?OfflineInsiderEnroll为你提供了…...
2026年智能系统控制、优化与应用国际学术会议(ISCOA 2026)
【重要信息】 会议官网:https://www.yanfajia.com/action/p/2W49G66K 会议时间:2026年10月16-18日 会议地点:中国 成都 截稿日期:2026年6月1日(早鸟优惠咨询) 接收或拒收通知:文章投递后…...
线上年销 10 亿的背后:实体转型的 “线上 + 线下” 实战逻辑复盘
在行业的讨论声中,总有声音将某些日化品牌的崛起归类为 “资本运作” 或 “流量套路”。但实际上,深耕日化赛道近 20 年的顶俏,凭借 10 亿级的年销售额,为无数身处转型期的实体商家,提供了一份极具含金量的实战答卷。从…...
别被TMOS吓到!拆解沁恒CH579蓝牙例程,看事件驱动如何简化你的代码
别被TMOS吓到!拆解沁恒CH579蓝牙例程,看事件驱动如何简化你的代码 第一次打开沁恒CH579的蓝牙例程,看到满屏的TMOS_前缀函数和eventID定义,是不是瞬间头皮发麻?作为从51单片机转战蓝牙开发的工程师,我完全理…...
终极指南:5分钟免费快速部署企业级ERP系统,新手也能轻松上手
终极指南:5分钟免费快速部署企业级ERP系统,新手也能轻松上手 【免费下载链接】erpnext_quick_install Unattended install script for ERPNext Versions, 13, 14 and 15 项目地址: https://gitcode.com/gh_mirrors/er/erpnext_quick_install 还在…...
免费解锁付费内容:Bypass Paywalls Clean Chrome扩展终极指南
免费解锁付费内容:Bypass Paywalls Clean Chrome扩展终极指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字阅读时代,你是否经常遇到想阅读的文章被付…...
国光黑苹果安装完整指南:OpenCore配置终极教程
国光黑苹果安装完整指南:OpenCore配置终极教程 【免费下载链接】Hackintosh 国光的黑苹果安装教程:手把手教你配置 OpenCore 项目地址: https://gitcode.com/gh_mirrors/hac/Hackintosh 你是否渴望在普通PC上体验macOS的流畅与优雅,但…...
Phi-3-Mini-128K应用场景:新能源电池BMS固件日志智能归因与故障预测
Phi-3-Mini-128K应用场景:新能源电池BMS固件日志智能归因与故障预测 想象一下,你是一家新能源车企的BMS(电池管理系统)软件工程师。凌晨三点,你的手机响了,生产线告警:一批电池包的固件在测试中…...
