Vue前端路由详解——以Ruoyi框架为案例学习

Vue路由

Vue路由详解_vue 页面路由-CSDN博客

路由模式

Vue 的路由模式:hash 模式和 history 模式的区别_vue路由history和hash的区别-CSDN博客

  1. URL格式
    • Hash模式:URL中包含#号,用于区分页面部分,实际请求的页面地址并没有改变。
    • History模式:URL看起来更加自然,像是普通的页面跳转,不包含#号。
  2. 兼容性
    • Hash模式:在所有浏览器中都能正常工作,包括老旧浏览器。
    • History模式:需要浏览器支持HTML5 History API,因此可能在一些旧版浏览器中无法使用。
  3. 对SEO的影响
    • Hash模式:由于搜索引擎不会解析#后面的内容,因此在SEO方面存在一定的问题。
    • History模式:搜索引擎能够直接解析路由路径,有利于SEO。
  4. 用户体验
    • Hash模式:URL中包含#号,可能影响用户体验和美观性。
    • History模式:URL更加美观,符合用户的直觉和期望。
  5. 刷新页面
    • Hash模式:刷新页面时,由于URL的hash部分不会向服务器发送请求,因此不会出现404错误。
    • History模式:刷新页面时,如果服务器未正确配置,浏览器会向服务器发送请求,如果服务器没有正确处理,将导致404错误。
  6. 服务器配置
    • Hash模式:无需对服务器进行特殊配置。
    • History模式:需要服务器配置支持,确保对所有前端路由的URL都能返回相同的页面(通常是index.html),以便前端路由接管后续的URL处理。
  7. 工作原理
    • Hash模式:通过监听URL的hash变化来实现路由跳转,不向服务器发送请求。
    • History模式:使用HTML5 History API(如pushState和replaceState)来修改浏览器历史记录,从而实现URL的跳转,但同样不向服务器发送请求。这种模式充分利用了浏览器的历史记录功能,实现了无刷新的页面跳转。

Vue路由的动态传参、前置后置路由以及路由组件传参详解

一、Vue路由的动态传参

Vue路由的动态传参主要通过两种方式实现:params方式和query方式

  1. params方式(动态路由匹配)

    • 定义路由:在路由配置中,可以使用:来定义动态片段。例如,{ path: '/user/:id', component: User }。这里的:id就是一个动态片段,它表示/user/后面可以跟随任意字符,这些字符会被捕获并作为$route.params的一部分。
    • 传参:通过<router-link>to属性或编程式导航(如this.$router.push)来传递参数。如果是<router-link>则需要在to对象中指定nameparams(注意,这里的params不会出现在URL中,且仅当路由是通过name进行匹配时有效)。如果是编程式导航,则可以通过pathparams(通常结合router.addRoutes动态添加路由时使用,或者在某些特定场景下,如嵌套路由)。
    • 接收参数:在目标组件中,可以通过this.$route.params来访问传递的参数。
  2. query方式

    • 定义路由:与params方式不同,使用query方式传参时,路由定义与普通路由无异,不需要特殊标记。
    • 传参:通过<router-link>to属性或编程式导航(如this.$router.push)来传递参数。在to对象中,使用query属性来定义要传递的参数。这些参数会出现在URL的查询字符串部分(即?后面的部分)
    • 接收参数:在目标组件中,可以通过this.$route.query来访问传递的参数。
二、前置路由守卫(前置钩子)

Vue Router 提供了导航守卫(Navigation Guards),允许你在路由跳转前后执行特定的逻辑。前置路由守卫(也称为全局前置守卫或路由独享守卫)是最常用的一种。

  • 全局前置守卫:可以通过router.beforeEach注册一个全局前置守卫。这个守卫会在路由即将改变前被调用,你可以在这里执行权限校验、页面跳转前的数据请求等操作。
  • 路由独享守卫:在单个路由配置中,可以直接定义beforeEnter守卫。这个守卫仅在该路由被访问时触发。
  • 组件内的守卫:组件内还可以定义beforeRouteEnterbeforeRouteUpdate(2.2+)和beforeRouteLeave守卫。这些守卫允许你在组件的不同生命周期阶段执行路由相关的逻辑。
三、路由组件传参

路由组件传参通常不是指通过路由本身传递参数给组件,而是指在组件之间通过路由进行跳转时,如何传递数据给目标组件。这实际上与路由的动态传参(params和query)紧密相关。

然而,Vue Router 还提供了一种特殊的方式,即props属性,它允许你将路由参数($route.params$route.query)映射为组件的props。这样,组件就可以像接收普通props一样接收路由传递的数据,而无需手动从$route对象中解构数据。

  • 使用props属性:在路由配置中,为组件设置props属性为true或对象/函数,即可将路由参数映射为组件的props。
    • props: true:将$route.params中的所有参数映射为组件的props。
    • props: { // 对象 }:允许你将路由参数映射为指定的props名。
    • props: (route) => ({ // 函数 }):允许你编写一个函数来返回应该被映射为props的对象。这个函数接收当前路由作为参数。

综上所述,Vue路由的动态传参、前置后置路由以及路由组件传参是Vue Router中非常强大的功能,它们为单页面应用(SPA)中的页面导航和数据传递提供了灵活而强大的支持。

 Ruoyi框架前端路由

Ruoyi框架是一个基于Vue.js和Spring Boot的开源企业级快速开发平台,它提供了一套完整的前后端分离的解决方案。在前端部分,Ruoyi框架主要使用了Vue.js作为前端框架,并通过Vue Router实现路由管理。以下是对Ruoyi框架前端路由的详细解析:

一、路由配置

在Ruoyi框架中,路由配置主要通过@/router/index.js文件进行管理。这个文件是Vue Router的入口文件,负责定义和配置所有的路由规则。

  1. 静态路由
    • 静态路由是指在路由配置阶段就确定好的路由规则,它们的路径和组件都是在编译时确定的,并且不需要动态判断权限的路由,如登录页、404页面等。
    • index.js文件中,静态路由通常被定义为一个常量数组constantRoutes,并在创建Vue Router实例时作为routes选项传入。
    • 静态路由的配置示例(简化版):
const constantRoutes = [ 
{ path: '/login', component: () => import('@/views/login/index'), hidden: true }, 
{ path: '/404', component: () => import('@/views/error-page/404'), hidden: true }, 
// 其他静态路由... 
]; const router = new VueRouter({ 
mode: 'history', 
base: process.env.BASE_URL, 
routes: constantRoutes 
});
  1. 动态路由
    • 动态路由是指在运行时根据某些条件动态添加或修改的路由规则,通常用于需要根据用户权限或其他条件动态生成路由规则的场景,如权限管理系统。
    • 在Ruoyi框架中,动态路由的配置通常放在@/store/modules/permission.js文件中,通过调用后端接口获取路由配置信息,并使用router.addRoutes方法动态添加到路由表中。
    • 动态路由的配置示例(简化版):
router.addRoutes(asyncRoutes);

二、路由守卫

Ruoyi框架在前端路由中使用了Vue Router提供的路由守卫功能,以实现权限控制、页面跳转前的数据请求等需求。

  1. 全局前置守卫
    • 通过router.beforeEach注册的全局前置守卫,可以在路由即将改变前执行特定的逻辑,如权限校验、页面跳转前的数据请求等。
    • 示例代码(简化版):
router.beforeEach((to, from, next) => { 
// 权限校验逻辑 
if (to.meta.roles && !store.getters.roles.includes(to.meta.roles[0])) { 
next({ path: '/404', replace: true }); 
} else { 
next(); 
} 
});
  1. 路由独享守卫组件内的守卫
    • 除了全局前置守卫外,Ruoyi框架还可能使用路由独享守卫(beforeEnter)和组件内的守卫(beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave)来实现更细粒度的控制。

三、路由懒加载

为了提高应用的加载速度和性能,Ruoyi框架在路由配置中使用了路由懒加载技术。通过动态导入(import())组件的方式,可以实现按需加载,即只有在访问到某个路由时,才会加载对应的组件代码。

四、路由元信息(meta)

在Ruoyi框架中,路由配置中的meta字段通常用于存储一些自定义的信息,如路由的权限要求、是否缓存、是否显示在侧边栏等。这些信息可以在路由守卫、组件内部等地方被访问和使用。

五、总结

Ruoyi框架前端路由通过Vue Router实现,支持静态路由和动态路由的配置,通过路由守卫实现权限控制等需求,采用路由懒加载提高应用性能,并通过路由元信息存储自定义信息。这些特性共同构成了Ruoyi框架前端路由的完整体系,为开发者提供了灵活、强大的路由管理能力。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【深度学习与NLP】——词嵌入Embedding技术

目录 1.词嵌入的作用 2.嵌入矩阵的计算 3.Embedding层的代码实验 词嵌入&#xff08;Embedding&#xff09;技术是一种将词汇映射到低维连续向量空间的方法。将离散的单词数据处理成连续且固定长度的向量&#xff0c;使模型可以学习和处理语义信息。 假设需要将["Are&…

【MySQL00】【 杂七杂八】

文章目录 一、前言二、MySQL 文件1. 参数文件2. 日志文件3. 套接字文件4. pid 文件5. 表结构定义文件6. InnoDB 存储引擎文件 二、BTree 索引排序三、InnoDB 关键特性1. 插入缓冲1.1 Insert Buffer 和 Change Buffer1.1 缓冲合并 2. 两次写2. 自适应哈希索引3. 异步IO4. 刷新邻…

关于武汉芯景科技有限公司的A/D转换芯片XJ3021开发指南(兼容MCP3021)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、时序&#xff08;IIC通信&#xff09; 四、程序代码 XJ3021.C /** XJ3021.c** Created on: 2024年8月23日* Author: Administrator*/ #include "softiic.h" #include "XJ3021.h" #inc…

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 09部署OSPF

本章的目的是帮助网络工程师确定网络的理想 OSPF 配置。本章将回答以下问题 应何时在数据中使用OSPF ?配置 OSPF 的关键设计原则是什么?OSPFv2 和 OSPFv3 之间有什么区别&#xff0c;应如何使用?如何在路由协议栈中配置 OSPF ?如何在服务器上配置 OSPF&#xff0c;例如为容…

【MySQL08】【死锁】

文章目录 一、前言二、查看事务加锁情况1. 使用 information_schema 数据库中表获取锁信息1.1 INNODB_TRX1.2 INNODB_LOCKS1.3 INNODB_LOCK_WAITS 2. 使用 SHOW ENGIN INNODB STATUS 获取锁信息 三、死锁四、参考内容 一、前言 最近在读《MySQL 是怎样运行的》、《MySQL技术内…

Android之Handler的post方法和sendMessage的区别

目录 post 方法方法特点 sendMessage 方法方法特点 使用场景区别总结 Handler 类在 Android 中用于在不同线程之间传递消息和执行代码。它提供了两种主要的方式来执行任务&#xff1a;通过 post 方法和通过 sendMessage 方法。这两种方法有不同的使用场景和特点。 post 方法 方…

浅谈架构实战

目录 背景 1 架构演变 2 如何实现高层的复用 2 中台产生案例 3 技术架构的核心要点 4 技术架构的高可用案例 背景 业务架构、数据架构、应用架构和技术架构它们是相互关联和相互支持的&#xff0c;共同构成了企业的总体架构&#xff0c;业务架构是源头&#xff0c;然后才…

自动生成对话视频!如何使用Captions的AI视频生成与编辑API工具?

Captions公司最近发布了一套AI驱动的视频生成和编辑API工具&#xff0c;为创作者和开发者提供了一个强大的视频创作生态系统。这个系统包含AI Creator、AI Twin、AI Edit、和AI Translate四大核心功能&#xff0c;每个工具都针对不同的创作需求进行优化。下面我们就一起来详细测…

第九周:机器学习

目录 摘要 Abstract 一、RNN 1、引入 2、RNN的分类 二、LSTM 1、基本结构 2、具体步骤 3、举例说明 4、原理理解 总结 摘要 本周主要围绕RNN进行探讨&#xff0c;从为什么需要这类”循环网络“入手&#xff0c;提到了”slot filling“技术&#xff0c;接着又对R…

AT3340:支持BDS/GPS双模授时板数据手册

AT3340采用ATGM331C-5T31授时模块&#xff0c;是高授时精度的BDS/GPS双模接收机板卡&#xff0c;包含32个跟踪通道&#xff0c;支持GPS和BDS的单系统授时定位和双系统联合授时定位&#xff0c;可以通过上位机命令切换。其中的射频前端芯片和基带芯片全部由杭州中科微独立研发&a…

RAG数据集自动构造探索, 附prompt

从文档中手动创建数百个 QA&#xff08;问题-上下文-答案&#xff09;样本可能非常耗时且劳动密集。此外&#xff0c;人工生成的问题可能难以达到全面评估所需的复杂程度&#xff0c;最终影响评估的质量。通过使用合成数据生成&#xff0c;开发人员在数据聚合过程中的时间可以减…

嵌入式Linux:常见信号的默认行为

信号是一种软件中断&#xff0c;用于通知进程发生了某种异步事件。信号可以由用户、其他进程或操作系统内核产生。进程可以选择捕获并处理这些信号&#xff0c;或者忽略它们&#xff0c;让系统执行默认操作。 不可靠信号&#xff08;非实时信号&#xff09;&#xff1a;编号为 …

观测云核心技术解密:eBPF Tracing 实现原理

前言 eBPF 是一种强大的内核技术&#xff0c;允许在内核中安全地执行自定义代码。通过 eBPF&#xff0c;开发者可以在不修改内核源码的情况下&#xff0c;对内核功能进行扩展和监控。eBPF Tracing 利用这一技术&#xff0c;对系统调用、内核函数等进行跟踪&#xff0c;从而实现…

【IPV6从入门到起飞】2-1 获取你的IPV6(手机、CPE等)

【IPV6从入门到起飞】2-1 获取你的IPV6&#xff08;手机、CPE等&#xff09; 1 IPV6就在身边2 手机IPV62.1 查看IPV62.2 IPV6 ping包测试2.3 IPV6入站测试 3 电脑通过CPE获取IPV63.1 拉不起宽带的打工人3.2 开始部署IPV6环境3.2.1 刷系统3.2.2 激活IPV63.2.3 设置防火墙入站&am…

JAVA - 关于防重复提交探讨

1、前端提交按钮做单次点击 2、后端接收判断请求的数据包&#xff0c;生成唯一key存redis&#xff0c;设置几秒的过期时间&#xff08;缺陷&#xff1a;带时间戳的数据&#xff0c;需要做些逻辑判断&#xff09; 3、后端代码逻辑redis分布式锁&#xff08;缺陷&#xff1a;re…

P01-Java何谓数组

P01-Java何谓数组 一、数组声明创建 1.1 数组声明的语法 与c有所不同 在Java中&#xff0c;数组声明语法 首选语法&#xff1a; //数据类型[] 数组名称; int[] arr;次选&#xff0c;与c类似 //数据类型 数组名称[]; int arr[];1.2 数组创建语法 与c指针有所相似&#xff0…

从源码开始:打造智能化食堂采购与供应链管理平台

随着食堂规模的扩大和供应链的复杂化&#xff0c;这些问题更加突出。智能化的食堂采购平台可以通过自动化流程、数据分析和智能推荐&#xff0c;显著提高采购效率&#xff0c;减少浪费&#xff0c;并降低运营成本。 要打造这样一个平台&#xff0c;首先需要对食堂的日常运营需…

Python基础语法(多进程开发进程建数据共享进程锁进程池)

Python基础语法文章导航&#xff1a; Python基础&#xff08;01初识数据类型&变量&#xff09;Python基础&#xff08;02条件&循环语句&#xff09;Python基础&#xff08;03字符串格式化&运算符&进制&编码&#xff09;Python基础&#xff08;04 基础练习…

【MATLAB源码-第259期】基于matlab的64QAM调制解调锁相环环载波同步仿真,对比前后星座图,输出锁相环响应曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. 概述 在现代数字通信系统中&#xff0c;为了提高频谱利用率和数据传输效率&#xff0c;经常采用多阶调制技术。64QAM&#xff08;64阶正交幅度调制&#xff09;便是其中的一种&#xff0c;它通过将数据映射到64个不同的复…