【Vue3+Vite】路由机制router 快速学习 第四期
文章目录
- 路由简介
- 路由是什么
- 路由的作用
- 一、路由入门案例
- 1. 创建项目 导入路由依赖
- 2. 准备页面和组件
- 3. 准备路由配置
- 4. main.js引入router配置
- 二、路由重定向
- 三、编程式路由(useRouter)
- 四、路由传参(useRoute)
- 五、路由守卫
- 总结
路由简介
路由是什么
路由就是根据不同的 URL 地址展示不同的内容或页面。
页面切换
路由的作用
- 单页应用程序(SPA)中,路由可以实现不同视图之间的无刷新切换,提升用户体验;
- 路由还可以实现页面的认证和权限控制,保护用户的隐私和安全;
- 路由还可以利用浏览器的前进与后退,帮助用户更好地回到之前访问过的页面。
一、路由入门案例
创建路由基本流程:
- 页面组件准备
- App主体页 :
- 定义 路由链接
<router-link to="/">
- 定义 路由显示位置
<router-view name="homeView">
- 定义 路由链接
- js配置路由:
- 导入路由
vue-router
相关依赖createRouter
和createWebHashHistory
方法 - 创建路由方法 声明路由规则
createRouter()
path:'/'
components:{ homeView:Home }
- 对外暴露
router
对象变量 给main.js
- 导入路由
main.js
中导入router配置- import 路由js
- 绑定路由对象
app.use(router)
需求分析:
1. 创建项目 导入路由依赖
npm create vite //创建项目cd 项目文件夹 //进入项目文件夹
npm install //安装项目需求依赖
npm install vue-router@4 --save //安装全局的vue-router 4版本
2. 准备页面和组件
- components/Home.vue
<script setup>
</script><template><div><h1>Home页面</h1></div>
</template><style scoped>
</style>
- components/List.vue
<script setup>
</script><template><div><h1>List页面</h1></div>
</template><style scoped>
</style>
- App.vue
<script setup>
</script><template><div><h1>App页面</h1><hr /><!-- 路由的连接 --><router-link to="/">home页</router-link><br /><router-link to="/list">list页</router-link><br /><!-- 路由连接对应视图的展示位置 --><hr />默认展示位置:<router-view></router-view><hr />Home视图展示:<router-view name="homeView"></router-view><hr />List视图展示:<router-view name="listView"></router-view><hr /></div>
</template><style scoped>
</style>
3. 准备路由配置
createWebHashHistory()
是 Vue.js 基于 hash 模式创建路由的工厂函数。- 在使用这种模式下,路由信息保存在 URL 的
hash
中,- 使用
createWebHashHistory()
方法,可以创建一个路由历史记录对象,用于管理应用程序的路由。- 在 Vue.js 应用中:
- 通常使用该方法来创建路由的历史记录对象。
- 就是路由中缓存历史记录的对象,vue-router
提供
- src/routers/router.js
// 导入路由创建的相关方法
import { createRouter, createWebHashHistory } from 'vue-router'// 导入vue组件
import Home from '../components/Home.vue'
import List from '../components/List.vue'// 创建路由对象,声明路由规则
const router = createRouter({history: createWebHashHistory(),routes: [{path: '/',components: {default: Home,homeView: Home}},{path: '/list',components: {listView: List}}]
})
// 对外暴露路由对象
export default router;
component
指定组件在默认的路由视图位置展示
components:Home
components
指定组件在name为某个值的路由视图位置展示
components:{default:Home,// 默认路由视图位置homeView:Home// name为homeView的路由视图位置
}
4. main.js引入router配置
import { createApp } from 'vue'import App from './App.vue'
//导入router模块
import router from './routers/router.js'
let app = createApp(App);
//绑定路由对象!!!
app.use(router);
app.mount('#app')
二、路由重定向
重定向的作用:将一个路由重定向到另一个路由上
- 修改案例:访问/list和/showAll都定向到List.vue
- router.js
- 定义routes :
/showAll
- 添加
redirect: '/list'
- 定义routes :
// 导入路由创建的相关方法
import { createRouter, createWebHashHistory } from 'vue-router'// 导入vue组件
import Home from '../components/Home.vue'
import List from '../components/List.vue'
import Add from '../components/Add.vue'
import Update from '../components/Update.vue'// 创建路由对象,声明路由规则
const router = createRouter({history: createWebHashHistory(),routes: [{path: '/',components: {default: Home,homeView: Home}},{path: '/list',components: {listView: List}},{path: '/showAll',// 重定向redirect: '/list'},{path: '/add',components: {addView: Add}},{path: '/update',components: {updateView: Update}}]
})
// 对外暴露路由对象
export default router;
- App页面 显示
- 点击show 也是list页面
<script setup>
</script><template><div><h1>App页面</h1><hr /><!-- 路由的连接 --><router-link to="/">home页</router-link><br /><router-link to="/list">list页</router-link><br /><router-link to="/showAll">showAll页 重定向到list</router-link><br /><router-link to="/add">add页</router-link><br /><router-link to="/update">update页</router-link><br /><!-- 路由连接对应视图的展示位置 --><hr />默认展示位置:<router-view></router-view><hr />Home视图展示:<router-view name="homeView"></router-view><hr />List视图展示:<router-view name="listView"></router-view><hr />Add视图展示:<router-view name="addView"></router-view><hr />Update视图展示:<router-view name="updateView"></router-view><hr /></div>
</template><style scoped>
</style>
三、编程式路由(useRouter)
普通路由
<router-link to="/list">list页</router-link>
- 这种路由,to中的内容目前是固定的,点击后只能切换
/list
对象组件(声明式路由)
编程式路由
- 通过
useRouter
,动态决定向那个组件切换的路由 - 在
Vue 3
和Vue Router 4
中,你可以使用useRouter
来实现动态路由(编程式路由) - 这里的
useRouter
方法返回的是一个 router 对象,你可以用它来做如导航到新页面、返回上一页面等操作。
案例需求:
通过普通按钮配合事件绑定实现路由页面跳转,不直接使用router-link
标签
- App.vue
<script setup>
import { useRouter } from "vue-router";
import { ref } from "vue";
//创建动态路由对象
let router = useRouter();let routePath = ref("");
let showList = () => {// 编程式路由// 直接push一个路径//router.push('/list')// push一个带有path属性的对象router.push({ path: "/list" });
};
</script><template><div><h1>App页面</h1><hr /><!-- 路由的连接 --><router-link to="/">home页</router-link><br /><router-link to="/list">list页</router-link><br /><router-link to="/showAll">showAll页 重定向到list</router-link><br /><router-link to="/add">add页</router-link><br /><router-link to="/update">update页</router-link><br /><!-- 动态输入路径,点击按钮,触发单击事件的函数,在函数中通过编程是路由切换页面 --><button @click="showList()">showList</button><br /><!-- 路由连接对应视图的展示位置 --><hr />默认展示位置:<router-view></router-view><hr />Home视图展示:<router-view name="homeView"></router-view><hr />List视图展示:<router-view name="listView"></router-view><hr />Add视图展示:<router-view name="addView"></router-view><hr />Update视图展示:<router-view name="updateView"></router-view><hr /></div>
</template><style scoped>
</style>
四、路由传参(useRoute)
路径参数
- 在路径中使用一个动态字段来实现,我们称之为 路径参数
- 例如: 查看数据详情
/showDetail/1
,1
就是要查看详情的id,可以动态添值!
- 例如: 查看数据详情
键值对参数
-
类似与get请求通过url传参,数据是键值对形式的
- 例如: 查看数据详情
/showDetail?hid=1
,hid=1
就是要传递的键值对参数
- 例如: 查看数据详情
-
在 Vue 3 和 Vue Router 4 中,你可以使用
useRoute
这个函数从 Vue 的组合式 API 中获取路由对象。 -
useRoute
方法返回的是当前的 route 对象,你可以用它来获取关于当前路由的信息,如当前的路径、查询参数等。
案例需求 :
切换到ShowDetail.vue组件时,向该组件通过路由传递参数
- 修改App.vue文件
<script setup>
import { useRouter } from "vue-router";
//创建动态路由对象
let router = useRouter();
//动态路由路径传参方法
let showDetail = (id, language) => {// 尝试使用拼接字符串方式传递路径参数//router.push(`showDetail/${id}/${languange}`)/*路径参数,需要使用params */router.push({ name: "showDetail", params: { id: id, language: language } });
};let showDetail2 = (id, language) => {/*uri键值对参数,需要使用query */router.push({ path: "/showDetail2", query: { id: id, language: language } });
};
</script><template><div><h1>App页面</h1><hr /><!-- 路径参数 --><router-link to="/showDetail/1/JAVA">showDetail路径传参显示JAVA</router-link><button @click="showDetail(1,'JAVA')">showDetail动态路由路径传参显示JAVA</button><hr /><!-- 键值对参数 --><router-linkv-bind:to="{path:'/showDetail2',query:{id:1,language:'Java'}}">showDetail2键值对传参显示JAVA</router-link><button @click="showDetail2(1,'JAVA')">showDetail2动态路由键值对传参显示JAVA</button><hr />showDetail视图展示:<router-view name="showDetailView"></router-view><hr />showDetail2视图展示:<router-view name="showDetailView2"></router-view></div>
</template><style scoped>
</style>
- 修改router.js增加路径参数占位符
// 导入路由创建的相关方法
import { createRouter, createWebHashHistory } from 'vue-router'// 导入vue组件import ShowDetail from '../components/ShowDetail.vue'
import ShowDetail2 from '../components/ShowDetail2.vue'// 创建路由对象,声明路由规则
const router = createRouter({history: createWebHashHistory(),routes: [{/* 此处:id :language作为路径的占位符 */path: '/showDetail/:id/:language',/* 动态路由传参时,根据该名字找到该路由 */name: 'showDetail',components: {showDetailView: ShowDetail}},{path: '/showDetail2',components: {showDetailView2: ShowDetail2}},]})// 对外暴露路由对象
export default router;
- ShowDetail.vue 通过useRoute获取路径参数
<script setup>
import { useRoute } from "vue-router";
import { ref, onUpdated } from "vue";// 获取当前的route对象
let route = useRoute();
let languageId = ref(0);
let languageName = ref("");// 借助更新时生命周期,将数据更新进入响应式对象
onUpdated(() => {// 获取对象中的参数languageId.value = route.params.id;languageName.value = route.params.language;console.log(languageId.value);console.log(languageName.value);
});
</script><template><div><h1>ShowDetail页面</h1><h3>编号{{route.params.id}}:{{route.params.language}}是世界上最好的语言</h3><h3>编号{{languageId}}:{{languageName}}是世界上最好的语言</h3></div>
</template><style scoped>
</style>
- ShowDetail2.vue通过useRoute获取键值对参数
<script setup type="module">
import { useRoute } from "vue-router";
import { onUpdated, ref } from "vue";
// 获取当前的route对象
let route = useRoute();
let languageId = ref(0);
let languageName = ref("");
// 借助更新时生命周期,将数据更新进入响应式对象
onUpdated(() => {// 获取对象中的参数(通过query获取参数,此时参数是key-value形式的)console.log(route.query);console.log(languageId.value);console.log(languageName.value);languageId.value = route.query.id;languageName.value = route.query.language;
});
</script><template><div><h1>ShowDetail2页面</h1><h3>编号{{route.query.id}}:{{route.query.language}}是世界上最好的语言</h3><h3>编号{{languageId}}:{{languageName}}是世界上最好的语言</h3></div>
</template><style scoped>
</style>
useRoute
函数用来接收参数
route.param
表示路径参数
route.query
表示键值对参数
五、路由守卫
- 路由守卫是用于在路由切换期间进行一些特定任务的回调函数。
- 路由守卫可以用于许多任务,例如验证用户是否已登录、在路由切换前提供确认提示、请求数据等。
- 全局前置守卫:在路由切换前被调用,可以用于验证用户是否已登录、中断导航、请求数据等。
- 全局后置守卫:在路由切换之后被调用,可以用于处理数据、操作 DOM 、记录日志等。
- 守卫代码的位置: 在router.js中
…
总结
相关文章:

【Vue3+Vite】路由机制router 快速学习 第四期
文章目录 路由简介路由是什么路由的作用 一、路由入门案例1. 创建项目 导入路由依赖2. 准备页面和组件3. 准备路由配置4. main.js引入router配置 二、路由重定向三、编程式路由(useRouter)四、路由传参(useRoute)五、路由守卫总结 路由简介 路由是什么 路由就是根据不同的 URL…...

python脚本实现浏览器驱动chromedriver的版本自动升级
chromedriver的版本号与chrome浏览器版本不匹配时在运行程序时就会报错 用下面的脚本可以自动安装chromedriver的最新版本到指定路径 from webdriver_manager.utils import get_browser_version_from_os from webdriver_manager.chrome import ChromeDriverManager import re…...

npm使用国内淘宝镜像
一、命令配置 1、设置淘宝镜像源 npm config set registry https://registry.npmmirror.com2、查看镜像使用状态 npm config get registry如果返回https://registry.npmmirror.com/,说明配置的是淘宝镜像。 如果返回https://registry.npmjs.org/,说明配置的是官网镜像。 二…...

# Redis 分布式锁如何自动续期
Redis 分布式锁如何自动续期 何为分布式 分布式,从狭义上理解,也与集群差不多,但是它的组织比较松散,不像集群,有一定组织性,一台服务器宕了,其他的服务器可以顶上来。分布式的每一个节点&…...

数据结构 归并排序详解
1.基本思想 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列,即先使每个子序列有序…...

服务器C盘突然满了,是什么问题
随着时代的发展、互联网的普及,加上近几年云计算服务的诞生以及大规模普及,对于服务器的使用目前是非常普遍的,用户运维的主要对象一般也主要是服务器方面。在日常使用服务器的过程中,我们也会遇到各式各样的问题。最近就有遇到用…...

【深度学习】ND4J-科学计算库
目录 简介 基础用法 基础信息 数组创建 打印数组 变更维度&堆叠 加减乘除 累加/最大/最小 转换操作 矩陈乘法 索引/迭代 深拷贝/引用传递/视图 引用传递 视图 深拷贝 其它 简介 ND4J主要是JVM的科学计算库,内置了很多计算方法,目的…...

2024-01-29 ubuntu 用脚本设置安装交叉编译工具链路径方法,设置PATH环境变量
一、设置PATH环境变量的方法,建议用~/.bash_profile的方法,不然在ssh登录的时候可能没有设置PATH. 二、下面的完整的脚本,里面的echo "export PATH$build_toolchain_path:\$PATH" >> $HOME/.bashrc 就是把交叉编译路径写写到.bashrc设置…...

今年春节很多年轻人选择不买战袍,减少年货置办,「极简过年」,如何看待此现象?
近年来,春节期间出现了一种新的现象,越来越多的年轻人选择不买战袍,减少年货置办,采用“极简过年”的方式度过春节。对于这一现象,不同人有不同的看法。 首先,这种极简过年的方式符合当前社会的一些价值观…...

C语言·贪吃蛇游戏(下)
上节我们将要完成贪吃蛇游戏所需的前置知识都学完了,那么这节我们就开始动手写代码了 1. 程序规划 首先我们应该规划好我们的代码文件,设置3个文件:snack.h 用来声明游戏中实现各种功能的函数,snack.c 用来实现函数,t…...

Flask 入门2:路由
1. 前言 在上一节中,我们使用到了静态路由,即一个路由规则对应一个 URL。而在实际应用中,更多使用的则是动态路由,它的 URL是可变的。 2. 定义一个很常见的路由地址 app.route(/user/<username>) def user(username):ret…...

【C++】 C++入门— 基于范围的 for 循环
C 基于范围的for循环1 使用样例2 使用条件3 完善措施 Thanks♪(・ω・)ノ谢谢阅读!下一篇文章见!!! 基于范围的for循环 1 使用样例 使用for循环遍历数组,我们通常这么写: …...

C++——析构函数
C——析构函数 什么是析构函数 析构函数是C中的一个特殊的成员函数,它在对象生命周期结束时被自动调用,用于执行对象销毁前的清理工作。析构函数特别重要,尤其是在涉及动态分配的资源(如内存、文件句柄、网络连接等)…...

Vue3学习记录(二)--- 组合式API之计算属性和侦听器
一、计算属性 1、简介 计算属性computed(),用于根据依赖的响应式变量的变化,进行自动的计算,并返回计算后的结果。当依赖的响应式变量发生变化时,computed()会自动进行重新计算,并返回最新的计算结果。如果依赖的…...

react-virtualized实现行元素不等高的虚拟列表滚动
前言: 当一个页面中需要接受接口返回的全部数据进行页面渲染时间,如果数据量比较庞大,前端在渲染dom的过程中需要花费时间,造成页面经常出现卡顿现象。 需求:通过虚拟加载,优化页面渲染速度 优点࿱…...

Linux系统各目录作用
/etc文件系统 /etc 目录包含各种系统配置文件,下面说明其中的一些。其他的你应该知道它们属于哪个程序,并阅读该程序的m a n页。许多网络配置文件也在/etc 中。 1. /etc/rc或/etc/rc.d或/etc/rc?.d 启动、或改变运行级时运行的脚本或脚本的目录。 2. /…...

嵌入式系统学习(一)
嵌入式现状(UP经历): 大厂的招聘要求: 技术栈总结: 产品拆解网站: 52audio 方案查询网站iotku,我爱方案网, 主要元器件类型:...

重写Sylar基于协程的服务器(3、协程模块的设计)
重写Sylar基于协程的服务器(3、协程模块的设计) 重写Sylar基于协程的服务器系列: 重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar) 重写Sylar基于协程的服务器(1、日志模…...

Linux之系统安全与应用续章
目录 一. PAM认证 1.2 初识PAM 1.2.1 PAM及其作用 1.2.2 PAM认证原理 1.2.3 PAM认证的构成 1.2.4 PAM 认证类型 1.2.5 PAM 控制类型 二. limit 三. GRUB加密 /etc/grub.d目录 四. 暴力破解密码 五. 网络扫描--NMAP 六. 总结 一. PAM认证 1.2 初识PAM PAM是Linux系…...

《HTML 简易速速上手小册》第7章:HTML 多媒体与嵌入内容(2024 最新版)
文章目录 7.1 在HTML中嵌入视频和音频7.1.1 基础知识7.1.2 案例 1:嵌入视频文件7.1.3 案例 2:嵌入音频文件7.1.4 案例 3:创建一个视频和音频混合的播放列表 7.2 使用 <iframe> 嵌入外部内容7.2.1 基础知识7.2.2 案例 1:嵌入…...

【CSS】移动端适配
移动端适配怎么做? 适配的目的是在屏幕大小不同的终端设备拥有统一的界面,让拥有更大屏幕的终端展示更多的内容。 meta viewport (视口) 移动端初始视口的大小默认是980px,因为世界上绝大多数PC网页的版心宽度为980px ,如果网页…...

DFS剪枝算法经典题目-挑选
4954. 挑选 - AcWing题库 给定一个包含 n 个正整数 a1,a2,…,an的集合。 集合中可能存在数值相同的元素。 请你从集合中挑选一些元素,要求同时满足以下所有条件: 被选中元素不少于 2 个。所有被选中元素之和不小于 l 且不大于 r。所有被选中元素之中最大…...

考研经验总结——考试期间
文章目录 一、订房二、看考场三、休息四、考前带宾馆的书五、安全 一、订房 我刚刚看了看,是9.10号订的酒店。你们可以提前向学长学姐打听你的考场在哪个学校(徐州的考生,考省外的学校是在矿大考试,考省内的学校是在江师大&#…...

vue3 源码解析(6)— lifecycle 生命周期的实现
前言 对于 vue3 的生命周期,我们经常性会去疑问,生命周期有哪些呢,它是怎么去实现的, 又是什么时候调用的。 vue3 生命周期有哪些 下面这个表格列出了所有选项式api生命周期钩子和组合式api生命周期钩子,以及他们的…...

three.js CSS2DRenderer、CSS2DObject渲染HTML标签
有空的老铁关注一下我的抖音: 效果: <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red;position: relative;"><…...

SECS/GEM300和半导体e84控制器
SECS(SEMI EQUIPMENT COMMUNICATIONS STANDARD 2)半导体设备通讯标准 GEM(Generic Equipment Model)定义了Fab中各个场景下设备行为及其所使用SECS消息。 GEM300也称为300mm标准,FAB是12寸设备的处理作业规范。主要包…...

k8s二进制及负载均衡集群部署详解
目录 常见部署方式 二进制部署流程 环境准备 操作系统初始化配置 关闭防火墙 配置SELinux 关闭SWAP 根据规划设置主机名 在master添加hosts,便于主机名解析 调整内核参数 配置时间同步 部署docker引擎 在所有node节点部署docker引擎 部署etcd集群 签发…...

【Django开发】0到1开发美多商城项目第3篇:用户注册业务实现(附代码,已分享)
本系列文章md笔记(已分享)主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目(4.0版本)含代码和文档。功能包括前后端不分离,方便SEO。采用Django Jinja2模板引擎 Vue.js实现前后端…...

免费的ppt网站分享
前言 相信大学生们深有体会,对于学校而言,好像是任何活动都需要我们做ppt,当你拿着自己辛苦做的ppt去展示现场的时候,你看到别人的ppt比你的还好,此时心情就是毙,当你知道人家不过是仅仅的1个小时不到就完成…...

基于Transformer结构的扩散模型综述
🎀个人主页: https://zhangxiaoshu.blog.csdn.net 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️,如有错误敬请指正! 💕未来很长,值得我们全力奔赴更美好的生活&…...