在前几篇文章中,我们介绍了 Vue 的性能优化机制、组件缓存等内容。本篇将深入解析 Vue Router 的原理,了解 Vue 如何管理路由并进行导航。


目录

  1. Vue Router 的基本概念
  2. 路由模式:hash 和 history
  3. 路由匹配原理
  4. 导航守卫
  5. Vue Router 的路由过渡动画
  6. 小结

Vue Router 的基本概念

Vue Router 是 Vue.js 官方提供的路由管理插件,负责管理 Vue 应用的页面导航。通过 Vue Router,开发者可以创建单页应用(SPA),在不同的视图间进行切换而无需重新加载页面。

Vue Router 的核心概念:

  • 路由配置:通过定义路由规则,告诉 Vue 哪个 URL 对应哪个组件。
  • 路由匹配:根据 URL 自动匹配对应的组件进行渲染。
  • 路由导航:实现页面跳转,通过编程式导航或声明式导航切换视图。

路由模式:hashhistory

Vue Router 支持两种路由模式:hash 模式history 模式。它们分别有不同的工作原理和适用场景。

1. Hash 模式

在 Hash 模式下,URL 中的路由信息会通过 # 符号来传递。浏览器不会重新加载页面,所有的路由切换都是通过修改 URL 后的哈希值来实现的。

http://example.com/#/home

优点:简单,兼容性好,不需要服务器支持。

缺点:URL 中包含 #,影响 SEOURL 美观。

2. History 模式

在 History 模式下,URL 使用的是 HTML5 提供的 History API,没有 # 符号。Vue Router 会监听浏览器的历史记录变化,来实现页面的跳转。

http://example.com/home

优点:URL 更加简洁,符合现代 Web 应用的标准。

缺点:需要服务器支持,必须配置服务器返回 index.html,否则刷新页面会 404


路由匹配原理

Vue Router 的路由匹配是基于 路径匹配组件渲染 的。Vue Router 会根据 URL 的路径找到匹配的组件,并将其渲染到页面上。

路由配置

路由的配置由 routes 数组定义,每个路由对象包含路径和组件两个属性。

复制代码
const routes = [{ path: '/home', component: Home },{ path: '/about', component: About }
]

路由匹配

当浏览器的 URL 地址变化时,Vue Router 会依次与路由配置中的每个路径进行匹配,直到找到符合的路径并渲染相应组件。

const router = new VueRouter({routes
})

动态路由

Vue Router 还支持动态路由,允许在路径中包含动态参数。

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

当路径为 /user/123 时,id 会作为参数传递给 User 组件。


导航守卫

导航守卫是 Vue Router 中的一个强大功能,它允许你在路由变化之前、之后或路由进入、离开时执行某些逻辑。常见的导航守卫包括 全局守卫路由独享守卫组件内守卫

1. 全局守卫

全局守卫在路由变化之前或之后执行。可以使用 beforeEach 和 afterEach 方法进行配置。

复制代码
router.beforeEach((to, from, next) => {// 路由切换前的操作next()
})

2. 路由独享守卫

路由独享守卫是针对每个路由独立配置的守卫,可以在路由配置中直接添加 beforeEnter。

const routes = [{path: '/home',component: Home,beforeEnter: (to, from, next) => {// 路由独享守卫next()}}
]

3. 组件内守卫

组件内守卫是在组件生命周期中执行的守卫,通常用在单个组件中。

复制代码
export default {beforeRouteEnter(to, from, next) {// 进入路由前执行next()},beforeRouteLeave(to, from, next) {// 离开路由前执行next()}
}

Vue Router 的路由过渡动画

Vue Router 还支持路由切换时的过渡动画。通过 <transition> 标签包裹路由视图,可以为路由切换添加动画效果。

示例:

复制代码
<transition name="fade" mode="out-in"><router-view></router-view>
</transition><style>
.fade-enter-active, .fade-leave-active {transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {opacity: 0;
}
</style>

通过这种方式,可以为路由切换增加淡入淡出的动画效果,提高用户体验。


小结

  1. Vue Router 是 Vue.js 的官方路由管理工具,支持 hash 模式history 模式
  2. 路由匹配是基于路径和组件的,支持静态和动态路由。
  3. 导航守卫 提供了强大的功能,用于在路由变化时执行特定逻辑。
  4. 路由过渡动画 使得页面切换更为流畅和自然。

📗下一篇进阶文章,我们将学习 Vuex 内部机制,了解 Vuex 的核心工作原理以及如何管理状态。

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

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

相关文章

Linux磁盘级文件/文件系统理解

Linux磁盘级文件/文件系统理解 1. 磁盘的物理结构 磁盘的核心是一个利用磁性介质和机械运动进行数据读写的、非易失性的存储设备。 1.1 盘片 盘片是传统机械硬盘中最核心的部件&#xff0c;它是数据存储的物理载体。盘片是一个坚硬的、表面极度光滑的圆形碟片&#xff0c;被安装…

【星海出品】rabbitMQ - 叁 应用篇

rabbitMQ 的基础知识这里就不阐述了,可以参看我早年写的文章 -> rabbitMQ 入门 https://blog.csdn.net/weixin_41997073/article/details/118724779 Celery 官网:http://www.celeryproject.org/ Celery 官方文档英文版:http://docs.celeryproject.org/en/latest/index.h…

C# 每个chartArea显示最小值、平均值、最大值

private void AddStatisticsAnnotations(ChartArea chartArea, int channelIndex) {RemoveExistingAnnotations(channelIndex);// 获取ChartArea的相对坐标&#xff08;百分比&#xff09;float chartAreaX chartArea.Position.X; // X坐标&#xff08;百分比&#xff09;floa…

打破“不可能三角”:WALL-OSS开源,具身智能迎来“安卓时刻”?

目录 引言&#xff1a;当“大脑”学会思考&#xff0c;机器人才能走出实验室 一、具身智能的“不可能三角”&#xff1a;机器人“大脑”的核心困境 二、WALL-OSS的四把重锤&#xff1a;如何系统性地破解难题&#xff1f; 2.1 第一锤&#xff1a;更聪明的“大脑”架构 —— …

SigNoz分布式追踪新体验:cpolar实现远程微服务监控

前言 SigNoz是一款开源的应用性能监控工具&#xff0c;专为微服务架构设计&#xff0c;集成了指标、追踪和日志分析功能。它能够全面监控分布式系统的性能&#xff0c;帮助开发团队快速定位问题根源。SigNoz支持OpenTelemetry协议&#xff0c;可以无缝集成各种编程语言和框架&…

python编程原子化多智能体综合编程应用(下)

上述代码实现了基于Mesa框架的诊断智能体类,包含以下核心功能: 模块化设计:通过类属性分离数据与行为,支持不同专科智能体的扩展 状态管理:实现idle/processing/error等状态转换,支持任务调度 诊断推理:集成机器学习模型,支持症状提取与多分类诊断 错误处理:包含模型加…

QT M/V架构开发实战:QSqlQueryModel/ QSqlTableModel/ QSqlRelationalTableModel介绍

目录[TOC](目录)前言一、初步介绍二、QSqlQueryModel1.基础定位2.特点3.核心接口4.典型用法5.优缺点三、QSqlTableModel1.基础定位2.特点3.核心接口4.典型用法5.优缺点四、QSqlRelationalTableModel1.基础定位2.特点3.核心接口4.典型用法 (示例&#xff1a;employees表有 dept_…

Terraform 从入门到实战:历史、原理、功能与阿里云/Azure 上手指南

前言&#xff1a;在云时代&#xff0c;企业的IT基础设施早已从“几台服务器”演变为“横跨多云的复杂网络、计算、存储集群”。但随之而来的&#xff0c;是管理复杂度的爆炸式增长&#xff1a;开发环境和生产环境不一致、手动配置容易出错、多云平台操作方式各异、资源变更难以…

【计算机网络 | 第10篇】信道复用技术

文章目录信道复用技术&#xff1a;高效利用通信资源的智慧方案一、频分复用&#xff08;FDM&#xff09;&#xff1a;按频率划分的并行通道二、时分复用&#xff08;TDM&#xff09;&#xff1a;按时间分割的轮流占用三、统计时分复用&#xff08;STDM&#xff09;&#xff1a;…

安卓13_ROM修改定制化-----禁用 Android 导航按键的几种操作

Android 设备的导航按键通常包括后退键(Back)、主页键(Home)和最近键(Recents),这些按键位于屏幕底部或设备实体区域。禁用导航按键可以帮助在特定应用场景(如信息亭模式或儿童锁模式)中限制用户操作。安卓设备上禁用底部虚拟导航键(返回、主页、多任务键)有多种方法…

通过S参数测量评估电感阻抗:第2部分

S21双端口分流和双端口串联方法 T这是两篇文章中的第二篇&#xff0c;专门讨论使用网络分析仪测量 S 参数进行电感阻抗评估主题。上一篇文章 [1] 描述了阻抗测量和计算S11使用单端口分流器、双端口分流器和双端口串联方法的参数。本文专门介绍阻抗测量和计算S21使用双端口分流…

[deepseek] C语言头文件与汇编实现讨论

我想询问一种代码实现方式&#xff0c;使用C语言&#xff0c;例如main.c包含了自己编写的库文件abc.h&#xff0c;我想问的是&#xff1a;一、abc.h中是否可以有实现函数的代码&#xff1b;二、abc.h中的函数是否可以在另一个后缀为asm的汇编文件中实现&#xff1f;非常好&…

`.cursorrules` 与 `.cursorcontext`:Cursor AI 编程助手时代下的“双轨配置”指南

.cursorrules 与 .cursorcontext&#xff1a;AI 编程助手时代下的“双轨配置”指南关键词&#xff1a;Cursor、AI 编程、上下文管理、开发规范、技术治理 适合读者&#xff1a;前端 / 全栈工程师、技术负责人、AI 辅助编程实践者1. 为什么又多了两个“点”文件&#xff1f; 随着…

XR 和 AI 在 Siggraph 2025 上主导图形的未来,获取gltf/glb格式

Meta 的 Boba 和 Tiramisu XR 耳机&#xff08;来源&#xff1a;Meta&#xff09; Siggraph 2025 今年重返不列颠哥伦比亚省温哥华&#xff0c;庆祝《玩具总动员》诞生 30 周年和视频游戏实时渲染 20 周年。虽然 Siggraph 需要时间来欣赏过去&#xff0c;但它更多的是展望未来…

在 Ubuntu 22.04 系统(CUDA 12.9)中,通过本地DEB 包安装 cuDNN 9.13.0 的方法步骤

以下是在 Ubuntu 22.04 系统(CUDA 12.9)中,通过本地单个 DEB 包安装 cuDNN 9.13.0 的完整步骤,核心包含 GPG 密钥配置与包安装验证,确保每一步可执行。 一、安装前核心检查(必做) 确保系统已满足基础条件,避免安装失败: 验证 CUDA 版本:打开终端执行命令,确认当前…

Element 中 upload 编辑回显文件上传信息技巧

文章目录需求分析需求 upload 编辑状态下回显已上传的文件信息 分析 添加fileList <el-uploadstyle"width: 100%"ref"uploadRef"class"upload-demo"action"/prod-api/jc/files/upload"multiple:limit"1":on-success&q…

php简介(第一天打卡)

一.php简介 1.什么是php&#xff1f; 1.1 Php 为什么叫这个名字&#xff1f; Personal home page 最开始用于个人主页建站 后更名为 hypertext preprocessor 超文本预处理 1.2 php是属于哪种语言&#xff1f; 后端语言 &#xff08;从开发角度分类&#xff09; 服务端语言…

Android 车联网——车载仪表屏开发(二十六)

通常汽车启动后需要快速显示仪表,而车载娱乐系统所在的Android系统,启动是比较耗时的,所以通常仪表系统会做在一个小型轻量化的系统内,从而达到快速启动的效果,最终实现汽车一发动,就立刻能显示出仪表必须显示的各项内容。 一、仪表功能介绍 1、仪表的发展 机械仪表:通…

RL--RLHF--PPO--GRPO--DPO速通

参考视频&#xff1a;1小时速通 - 从强化学习到RLHF - 简介_哔哩哔哩_bilibili 强化学习RL RL的核心就是智能体Agent 与 环境Environment的交互。 状态&#xff08;State&#xff0c;s&#xff09;&#xff1a;环境在某一时刻的描述&#xff0c;表示当前情境。动作&#xff0…

hardhat 项目目录介绍

使用 npx hardhat init初始化一个 Hardhat 项目后&#xff0c;会生成一个结构清晰的目录&#xff0c;每个部分都有其特定用途。下面是一个表格汇总了主要的目录和文件及其作用&#xff0c;方便你快速了解&#xff1a;contracts/​​存放项目的 ​​Solidity 智能合约源代码​​…