vue保姆级教程----深入了解 Vue Router的工作原理

📢 鸿蒙专栏:想学鸿蒙的,冲

📢 C语言专栏:想学C语言的,冲

📢 VUE专栏:想学VUE的,冲这里

📢 CSS专栏:想学CSS的,冲这里

📢 Krpano专栏:想学VUE的,冲这里

🔔 上述专栏,都在不定期持续更新中!!!!!!!!!!!!!

目录

✨ 前言

✨ vue-router详解

vue-router的组成部分

前端路由的两种模式

导航解析流程

路由信息对象

✨ 结语


✨ 前言

        Vue Router是Vue.js的官方路由管理器,它与Vue.js核心深度集成,可以很好地帮助我们构建单页面应用。那么它是如何工作的呢?本文将带你深入了解vue-router的工作原理。

✨ vue-router详解

vue-router的组成部分

  • Route:路由对象,包含路径、组件等路由信息。
    const routes = [
      {
        path: '/user/:id',
        component: User,
        alias: '/usr', 
        meta: { requiresAuth: true }
      }
    ]
  • Router:路由器对象,包含路由映射表和监听路由改变。
    const router = new VueRouter({
      routes // 路由映射表
    })
    
    // 监听路由改变事件
    router.beforeEach((to, from, next) => {
      // ...
    })
  • Router-view:根据当前路由渲染匹配的组件,是一个Outlet。
    <router-view></router-view>
  • Router-link:路由连接,绑定到对应路由的锚点标签。
    <router-link to="/user/123">User</router-link>
  • 导航守卫(Navigation Guards):可在路由导航发生时进行访问控制。

导航守卫的类型

  • 全局守卫:router.beforeEach,监听每一个路由导航。
  • 路由独享守卫:beforeEnter在路由配置中定义。
  • 组件内守卫:beforeRouteEnter,在激活组件前调用。

钩子的参数

  • to:目标路由对象
  • from:当前导航要离开的路由
  • next:调用该方法来resolve这个钩子

next方法的处理

  • next():进行管道中的下一个钩子。
  • next(false):中断当前导航。
  • next('/path'):跳转到一个不同的地址。
  • next(error):传入一个Error实例作为参数,导航会被终止且该错误会被传递给 router.onError() 注册过的回调。

应用场景

  • 权限控制:检查用户权限 then决定允许进入路由或退回登录页。
  • 数据预取:在进入路由前预先获取数据。
  • 异步导航:路由导航成功之前展示“加载中”。

所以导航守卫可以对路由进行更多控制,是vue-router强大的功能之一。

router.beforeEach((to, from, next) => {
  // ...
  next() 
})

前端路由的两种模式

vue-router支持两种路由模式:

  • hash: hash模式利用 URL 的 hash 实现路由。比如 http://example.com/#/user

优点是兼容性好,无须服务器配置。但 URL 不够优雅,有 #,不符合 REST 风格。

实现:监听 hashchange 事件,根据 hash 更新组件。

window.addEventListener('hashchange', () => {
  // 根据 hash 读取组件
})
  • history:history 模式通过 history API 改变 URL,如 http://example.com/user

优点是 URL 优雅,没有 # 。但需要服务端支持,解析 URL 并重定向。

实现:通过 history.pushState() 改变 URL,监听 popstate 事件。

总结:

  • hash 模式兼容性好,但 URL 不够优雅。
  • history 模式 URL 优雅,但需要服务端配合解析。
  • Vue Router 默认支持两种模式,可以根据需求选择。

导航解析流程

  1. 初始化路由器,注册路由表规则。
  2. Router-link组件或代码导航触发路由change。
  3. Router匹配当前URL,解析出目标路由记录。
  4. Router确认转移路由后,更新视图和URL。
  5. 组件根据路由参数准备数据,Router-view呈现组件。

路由信息对象

每个路由都会映射一个组件,同时可以有额外的元信息:

✨ 结语

        vue-router通过管理路由与组件的动态映射,实现了单页面应用的不同页面之间的切换。路由器监听 URL 变化,映射匹配的路由配置,然后渲染目标组件。各种路由钩子也让我们可以更好地控制路由导航。

        总而言之,vue-router为Vue单页面应用提供了便捷的客户端路由管理,使得页面模块化和开发更加高效。它与Vue深度集成,使构建复杂的单页面应用变得简单自然。正确理解和灵活运用其工作原理,可以使我们的Vue项目开发达到更高的水准。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解

引言&#xff0c;少年们&#xff0c;大家好。在这里祝大家元旦快乐&#xff0c;我是博主那一脸阳光&#xff0c;今天来介绍二分查找 在计算机科学领域&#xff0c;搜索算法是数据处理和问题解决的重要工具之一。其中&#xff0c;**二分查找算法&#xff08;Binary Search&#…

Python 正则表达式

文章目录 第1关&#xff1a;正则表达式基础知识第2关&#xff1a;re 模块中常用的功能函数&#xff08;一&#xff09;第3关&#xff1a;re 模块中常用的功能函数&#xff08;二&#xff09; 第1关&#xff1a;正则表达式基础知识 编程要求 根据提示&#xff0c;补全右侧编辑器…

三菱MR-JE伺服脉冲轴应用参数设置

三菱MR-JE伺服在脉冲轴控制上的应用&#xff0c;常用参数设置如下&#xff1a; 1、常用参数 未完...

海信旗下“隐形冠军”信芯微,授权世强硬创代理32位MCU等产品

近日&#xff0c;世强先进&#xff08;深圳&#xff09;科技股份有限公司&#xff08;下称“世强先进”&#xff09;与海信集团旗下子公司——青岛信芯微电子科技股份有限公司&#xff08;下称“信芯微”&#xff0c;英文名&#xff1a;Hi-image&#xff09;签订授权代理合作协…

树莓派4B-Python使用PyCharm的SSH协议在电脑上远程编辑程序

目录 前言一、pycharm的选择二、添加SSH的解释器使用总结 前言 树莓派的性能始终有限&#xff0c;不好安装与使用高级一点的程序编辑器&#xff0c;如果只用thonny的话&#xff0c;本人用得不习惯&#xff0c;还不如PyCharm&#xff0c;所以想着能不能用电脑中的pycharm来编写…

低功耗蓝牙模块:促进智慧城市发展的关键技术

在科技快速发展的时代&#xff0c;智慧城市的概念正引领着城市管理的革新。为实现城市更高效、可持续和智能化的管理&#xff0c;低功耗蓝牙模块成为推动智慧城市发展的关键技术之一。本文将探讨低功耗蓝牙模块在智慧城市中的作用&#xff0c;以及其在城市基础设施、公共服务等…

JavaScript可选链接

注&#xff1a;本节仍然使用之前的饭店的对象&#xff0c;可以看上几篇文章查看代码 ● 如果我们想要看看饭店周一的开门时间&#xff0c;我们会这么写 console.log(restaurant.openingHours.mon.open);原因是我们在开放时间中并没有定义周一的开放时间&#xff0c;所有会报错…

【C语言】作用域 和 生命周期

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

暂时性死区:JavaScript 中隐藏的陷阱

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

分布式数据库事务故障恢复的原理与实践

关系数据库中的事务故障恢复并不是一个新问题&#xff0c;自70年代关系数据库诞生之后就一直伴随着数据库技术的发展&#xff0c;并且在分布式数据库的场景下又遇到了一些新的问题。本文将会就事务故障恢复这个问题&#xff0c;分别讲述单机数据库、分布式数据库中遇到的问题和…

记事本在手机桌面上怎么找?手机里的记事本怎么找?

在日常生活、工作和学习中&#xff0c;我们时常需要随手记录一些重要的事项、灵感闪现的瞬间或者是待办的任务。比如&#xff0c;在超市购物前&#xff0c;列出购物清单&#xff1b;在开会时&#xff0c;记下重要的讨论点&#xff1b;在学习时&#xff0c;捕捉那一刹那的灵感。…

58.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏菜单文字资源读取的逆向分析

内容来源于&#xff1a;易道云信息技术研究院VIP课 之前的内容&#xff1a;接管游戏的自动药水设定功能-CSDN博客 码云地址&#xff08;master分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;34b9c1d43b512d0b4a3c395b…

JavaScript中BOM操作【通俗易懂】

✨前言✨   本篇文章主要在于了解JavaScript中BOM(即浏览器对象模型),以及对它的简单使用 &#x1f352;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f352;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留…

Unity | 渡鸦避难所-5 | 角色和摄像机之间的遮挡物半透明

1 前言 角色在地图上移动到岩石后面时&#xff0c;完全被岩石遮挡&#xff0c;玩家只能看到岩石。这逻辑看起来没问题&#xff0c;但并不是玩家想要看到的画面&#xff0c;玩家更希望关注角色的状态 为了避免角色被遮挡&#xff0c;可以使用 Cinemachine Collider 功能&#x…

‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。这个问题如何解决?

这个错误信息 vue-cli-service 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件 表示 vue-cli-service 命令在你的系统上未被识别。这通常是因为 Vue CLI 没有被正确安装或其路径没有被加入到系统的环境变量中。以下是几个解决这个问题的步骤&#xff1a; 确认 …

二维码地址门牌系统物业采集端:打造智能化、便捷化的住户登记体验

文章目录 前言一、集成先进科技&#xff0c;提升登记效率二、简化登记流程三、实际效果与应用价值四、未来展望 前言 在科技不断进步的时代&#xff0c;追求智能化与便捷化的生活方式已成为人们的目标。二维码地址门牌系统物业采集端应运而生&#xff0c;为居民提供全新的登记…

怎样消除图片上的水印三招教你如何图片去水印

在数字的洪流中&#xff0c;图片已成为我们生活的一部分&#xff0c;仿佛绿洲之于沙漠。然而&#xff0c;有时这些图片会带上水印&#xff0c;如美玉上的瑕疵&#xff0c;既影响了视觉的美感&#xff0c;也可能阻碍了我们的使用。那么&#xff0c;如何揭去这层恼人的面纱呢&…

微服务-OpenFeign-工程案例

Ribbon 前置知识 是NetFlix的开源项目&#xff0c;主要来提供关于客户端的负载均衡能力。从多个服务提供方&#xff0c;选取一个节点发起调用。 Feign:NetFlix,SpringCloud 的第一代LB&#xff08;负载均衡&#xff09;客户端工具包。 OpenFeign:SpringCloud自研&#xff0c…

STM32G030F6P6读写flash失败问题(HAL)

STM32G030是F0系列的升级版&#xff0c;其在性能上比F0要好很多&#xff0c;具体G0参数如下&#xff1a; 最开始做项目选用的单片机是STM32F030F4P6&#xff0c;但是在后期使用中发现&#xff0c;我的FLASH&#xff08;16K&#xff09;不够用了&#xff0c;就选择了STM32G030F6…

基于YOLOv8深度学习的人脸面部表情识别系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…