当前位置: 首页 > news >正文

Vue--》Vue 3 路由进阶——从基础到高级的完整指南

目录

Vue3中路由讲解与使用

路由的安装与使用

路由模式的使用

编程式路由导航

路由传参

嵌套路由

命名视图

重定向与别名


Vue3中路由讲解与使用

Vue 路由是 Vue.js 框架提供的一种机制,它用于管理网页上内容的导航。Vue 路由可以让我们在不刷新页面的情况下,根据浏览器地址栏中的路径显示不同的页面内容

Vue 路由通常用于单页应用程序(SPA)开发,它可以将应用程序划分成多个视图(view)和组件(component),并根据 URL 中的参数来动态地加载这些组件和页面。Vue 路由具有简单、灵活、可扩展等特点,它可以极大地提高 Web 应用程序的用户体验和交互效果。Vue 路由在 Vue.js 3.x 版本中有了一些新的特性,在使用时最好使用 Vue Router 组件库。详情可参考:官方文档

在学习vue3路由之前,你也可以简单了解一下vue2使用路由的方式:vue2路由版本 。在开局讲解vue3路由知识之前,我先透个底简单说明一下vue2与vue3路由之间发生了哪些变化,抱着先了解这些内容的前提下在接着看文章,获取会有醍醐灌顶的感觉。

vue2与vue3路由使用方式的区别

路由实例的创建方式

● vue2:使用 new VueRouter 创建实例

● vue3:使用 createRouter 工厂函数创建路由实例

路由实例的挂载方式

● vue2:使用 router 选项将路由实例挂载到根 Vue 实例上

● vue3:使用 app.use(router) 将路由实例挂载到根 Vue 应用上

路由钩子函数的变化

● vue2:在路由组件中使用 beforeRouteEnter、beforeRouteUpdate 和 beforeRouteLeave                钩子函数来拦截页面跳转或修改路由参数。

● vue3:引入了新的路由钩子函数 beforeEach、beforeResolve 和 afterEach,同时还支持                  传统的 beforeRouteEnter、beforeRouteUpdate 和 beforeRouteLeave 钩子函数。

动态路由的变化

● vue2:手动使用 router.addRoutes() 方法添加动态路由。

● vue3:引入了新的 routes 选项,可以直接在路由配置中定义动态路由。

路由懒加载的改进

● vue2:使用 import 加载异步路由组件。

● vue3:引入了新的 import() 语法,可以更方便地进行路由懒加载。

总的来说:Vue3 的路由模式相对于 Vue2 更加灵活和易用,同时还加入了一些新的功能和钩子函数。

路由的安装与使用

这里我使用vite构建工具创建的vue3+ts项目,不了解vite的可以看一下本专栏对vite讲解的文章。

终端执行如下命令,按照vue路由:注意:如果你是vue2项目的话就安装vue-router@3版本的,如果你是vue3就默认安装4版本的就好了。

npm install vue-router -S

安装完成之后,一般我们都会在src目录下新建一个router文件夹,里面存放着路由文件,这里注册组件我采用的是路由懒加载方式,只有在需要时才动态加载相应的代码,从而提高应用程序的性能和加载速度。这种方式下,在路由被访问时,对应的组件才会被加载。

import { createRouter,createWebHistory,RouteRecordRaw } from 'vue-router'const routes:Array<RouteRecordRaw> = [{ path: '/',component:()=>import("../components/login.vue") },{ path: '/reg',component:()=>import("../components/reg.vue") },
]
const router = createRouter({history: createWebHistory(),routes
})
export default router

在 main.ts 入口文件,进行router路由的挂载:

import { createApp } from 'vue'
import App from './App.vue'
import router from "./router"createApp(App).use(router).mount('#app')

如果想把写好的路由进行展示的话,需要通过 router-view 作为路由出口,路由匹配到的组件将进行响应的渲染。

当然我们也可以通过 router-link 作为导航按钮进行路由的动态切换,如下:

路由模式的使用

路由的三种形式如下:

history 模式

使用 HTML5 的 History API 来管理路由状态,在这种模式下,URL 中不包括 # 符号。优点是 URL 看起来更加干净,缺点是需要服务器端配置,否则刷新页面会 404。

hash 模式

URL 中包含 # 符号,后面跟着具体的路径信息。在这种模式下,路由状态是通过监听 hashchange 事件来更新的。它的优点是兼容性好,缺点是 URL 看起来比较丑陋。

abstact 模式

是一种特殊的路由模式,它用于将嵌套路由与其父级路由相分离,具体来说,抽象路由模式使用一个不对应实际 URL 的“空路径”路由作为父路由。这个“空路径”路由没有对应的组件渲染,只起到一个容器的作用,它的下级路由的路径是基于该路由的路径计算的。

Vue3在路由模式方面的改变并不是很大,只是引入了一些新的API和功能来提高应用程序的性能。

vue2采用 mode history ;vue3采用createWebHistory

vue2采用 mode hash    ;vue3采用createWebHashHistory

vue2采用 mode abstact;vue3采用createMemoryHistory

比如说我采用的是createWebHashHistory方式,浏览器url地址就会出现一个 # ,如下:

那么在日常开发过程中,我们该如何选择路由模式呢?这需要考虑你的应用程序的类型和需求。如果你正在构建一个单页应用程序,那么hash模式可能更适合你。如果你需要更传统的URL路径,并且愿意付出服务器端配置的代价,那么history模式可能更适合你。 

编程式路由导航

编程式路由导航是指通过代码来控制应用程序中的页面之间的跳转。在前端框架中,路由导航是实现单页面应用 (Single Page Application) 的关键之一,它可以帮助用户快速地在不同的页面之间进行切换,从而提高了用户的体验。

在编程式路由导航中,开发者可以通过调用框架提供的 API 来实现页面跳转。这些 API 包括但不限于以下几种:

push: 将新的路由添加到浏览器历史记录中,并显示相应的组件。

replace: 用新的路由替换当前路由,并显示相应的组件。

go: 在浏览器历史记录中向前或向后移动若干步。

back: 在浏览器历史记录中向后移动一步。

forward: 在浏览器历史记录中向前移动一步。

通过使用这些 API,开发者可以非常方便地实现页面的跳转,并且可以根据业务逻辑来进行灵活的控制,从而实现更好的用户体验。举个简单的例子:

路由传参

在编程式路由导航中,我们也可以进行路由传递参数,如下设置场景模拟数据:

定义一个json文件,存放我们模拟的json数据:

{"data":[{"name":"小张","age":20,"address":"北京"},{"name":"小王","age":25,"address":"上海"},{"name":"小李","age":40,"address":"南京"}]
}

这里可以安利一个插件 JSON to TS 用来将json代码转换成 TS 接口,插件安装完成之后,全选json代码,然后 按住 ctrl+shift+alt+s即可,如下生成对应的接口:

接下来开始将数据渲染到页面上:

模拟好数据之后,接下来开始着重讲解几种用户数据传参的方式,如下:

query传参方式

params传参方式

使用该传参方式,传递对象中不再是和query传参方式一样是一个path属性,而是一个name属性,其属性值就是我们定义好的routes属性值,如下:

在进行params传参时,传递的需是一个对象,然后要用name名称而不是path,如下:

我目前下载的是最新版本的vue-router,如下,该版本有个恶心的地方就是你用params传参是,routes的路径也必须动态跟上,少一个参数就不显示该参数对应的内容,也是为了安全性的考虑,没办法,只能如此:

嵌套路由

嵌套路由是指在一个路由路径下再嵌套另一个子路由,用于组织和管理应用程序的不同部分或模块。这种路由方式可以提高代码可读性和可维护性,同时也可以更好地控制页面渲染和用户导航。

凡是在当前路由下有一个children属性,children下的路由就是该路由下的子路由,如下:

在父路由也通过 router-view 的方式显示子路由的内容:

命名视图

重定向与别名

当然我们也可以进行设置重定向的方式,如下重定向必须用在嵌套路由才能使用:

当然官方也给我们提供其他的方式:

设置别名的意思就是,你给这路径设置一些其他的名字,你访问这些名字也能访问这个组件的内容

Vue3路由的基本操作就讲解到这,下一篇文章会继续讲解vue3导航守卫的相关内容,喜欢的朋友可以点击关注一键三联,您的支持就是博主创作的最大动力!!!

相关文章:

Vue--》Vue 3 路由进阶——从基础到高级的完整指南

目录 Vue3中路由讲解与使用 路由的安装与使用 路由模式的使用 编程式路由导航 路由传参 嵌套路由 命名视图 重定向与别名 Vue3中路由讲解与使用 Vue 路由是 Vue.js 框架提供的一种机制&#xff0c;它用于管理网页上内容的导航。Vue 路由可以让我们在不刷新页面的情况下…...

【华为OD机试真题】【python】 网上商城优惠活动(一)【2022 Q4 | 100分】

华为OD机试- 题目列表 2023Q1 点这里!! 2023华为OD机试-刷题指南 点这里!! 题目描述 某网上商场举办优惠活动,发布了满减、打折、无门槛3种 优惠券,分别为: 1:每满100元优惠10元,无使用数限制,如100~199元可以使用1张减10元,200-299可使用2张减20元,以此类推; 2:…...

【业务数据分析】—— 用户留存分析(以挖掘Aha时刻为例)

目录 一、用户留存是什么 二、为什么要考虑用户留存 1、为什么要考虑用户留存&#xff1f; 2、影响用户留存的可能因素 3、用户留存的3个阶段 三、怎么进行用户留存分析(挖掘Aha时刻) 1、Aha时刻 2、Aha时刻的作用 3、挖掘Aha时刻 一、用户留存是什么 在互联网行业中&…...

极客的git常用命令手册

极客的git常用命令手册 1.1 权限配置篇1.1.1 创建ssh key1.1.2 本地存在多个密钥时&#xff0c;如何根据目标平台自动选择用于认证的密钥&#xff1f; 1.2 基础信息配置篇1.2.1 配置用户名1.2.2 配置用户邮箱1.2.3 设置文件名大小写区分1.2.4 设置命令行显示颜色1.2.5 检查git全…...

spring-data 一统江湖,玩转多种数据源

1、起因 因为要在项目中同时访问redis&#xff0c;mongo和mysql三种数据库&#xff0c;而且因为偏向spring-data&#xff0c;所以都使用了spring-data 在使用的过程中如果不做配置发现会有冲突&#xff0c;这篇文章也是解决这个问题&#xff0c;避免以后遇到同样的问题不知所…...

【EMC专题】为什么PCB上的单端阻抗控制在50欧?

每当我们在发板后和PCB板厂沟通说有些走线需要阻抗控制,控制在多少多少。其实我们所说的阻抗是传输线的特性阻抗。特性阻抗是不能用万用表测量出来的,他由传输线的结构以及材料决定,与传输线的长度、信号的幅度、频率等均无关。 特性阻抗的概念 当电磁波在电缆上…...

想自学写个操作系统,有哪些推荐看的书籍?

前言 哈喽&#xff0c;我是子牙&#xff0c;一个很卷的硬核男人。喜欢研究底层&#xff0c;聚焦做那些大家想学没地方学的课程&#xff1a;手写操作系统、手写虚拟机、手写编程语言… 今天我们将站在一个自学者的角度来聊聊如何实现自己的操作系统。并为大家推荐几本能够帮助你…...

深入理解Java虚拟机:JVM高级特性与最佳实践-总结-7

深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践-总结-7 类文件结构概述无关性的基石 虚拟机类加载机制概述类加载的时机 类文件结构 代码编译的结果从本地机器码转变为字节码&#xff0c;是存储格式发展的一小步&#xff0c;却是编程语言发展的一大步 概述 我们写的程…...

ES6中flat与flatMap使用

1、方法介绍 数组的成员有时还是数组&#xff0c;Array.prototype.flat()用于将嵌套的数组“拉平”&#xff0c;变成一维的数组。该方法返回一个新数组&#xff0c;对原数据没有影响。 [1, 2, [3, 4]].flat() // [1, 2, 3, 4]上面代码中&#xff0c;原数组的成员里面有一个数…...

苹果手机、电脑如何进行屏幕录制?苹果录屏功能在哪?

随着人们生活水平的提高&#xff0c;不少小伙伴都会选择苹果手机、苹果电脑作为主要的设备。因为使用苹果电脑进行办公&#xff0c;不仅仅能够提升效率&#xff0c;对于文件的安全性也是有一些保障的。那么&#xff0c;在使用苹果电脑的时候&#xff0c;如果需要有录屏的需求该…...

什么是研发 Lead Time?我悟了!

嗨&#xff0c;朋友&#xff01;你听说过「新型工伤」吗&#xff1f; 我好像「赛博确诊」了&#x1f623; 那天朋友约我吃饭&#xff0c;我下意识回复了句「好的&#xff0c;那我提一个日程」……还有上次跟一位准妈妈聊天&#xff0c;我好奇宝宝的预产期&#xff0c;结果脱口…...

android 窗口焦点介绍

背景 我们经常会遇到一种Application does not hava focused window的ANR异常&#xff0c;这种异常一般是没有焦点窗口FocusedWindow导致,且这类异常只会发生在key事件的派发&#xff0c;因为key事件是需要找到一个焦点窗口然后再派发&#xff0c;而触摸事件只需要找到当前显示…...

研发工程师玩转Kubernetes——构建、推送自定义镜像

这几节我们都是使用microk8s学习kubernetes&#xff0c;于是镜像库我们也是使用它的插件——registry。 开启镜像库插件 microk8s enable registry模拟开发环境 我们使用Python作为开发语言来进行本系列的演练。 安装Python sudo apt install python3.11安装Pip3 pip3用于…...

[网络安全]DVWA之XSS(Stored)攻击姿势及解题详析合集

[网络安全]DVWA之XSS&#xff08;Stored&#xff09;攻击姿势及解题详析合集 XSS(Stored)-low level源代码姿势基于Message板块基于Name板块 XSS(Stored)-medium level源代码姿势双写绕过大小写绕过Xss标签绕过 XSS(Stored)-high level源代码姿势&#xff1a;Xss标签绕过 XSS(S…...

VP记录:Codeforces Round 873 (Div. 2) A~D1

传送门:CF 前题提要:因为本场比赛的D题让我十分难受.刚开始以为 r − l 1 r-l1 r−l1与 r − l r-l r−l应该没什么不同.但是做的时候发现假设是 r − l 1 r-l1 r−l1的话我们可以使用线段树来维护,但是 r − l r-l r−l就让线段树维护的难度大大增加,这导致我十分烦躁,所以…...

【C++】函数提高

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01;时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、函数默认参数 3、函数占位参数 4、总结 1、缘起 以前学习过了函数的基本用法和功能&#xff0c;现在是时候学习函数…...

【可持续能源:让我们迈向绿色、可持续未来的道路】

作为未来的主要能源来源&#xff0c;可持续能源技术确实有潜力改变我们的世界。随着全球对传统化石燃料的依赖程度逐渐降低&#xff0c;可再生能源已成为许多国家推进能源转型的首选。 从太阳能和风能到地热能和潮汐能&#xff0c;可持续能源技术已经在许多方面取得了重大突破…...

ES6中数组新增了哪些扩展?

一、扩展运算符的应用 ES6通过扩展元素符...&#xff0c;好比 rest 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的参数序列 console.log(...[1, 2, 3]) // 1 2 3console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5[...document.querySelectorAll(div)] // [<div>, …...

【算法】动态规划

一、基础知识 动态规划的基本思想&#xff1a;将待求解问题分解成若干个子问题&#xff0c;如果各个子问题不是独立的&#xff0c;不同的子问题的个数只是多项式量级&#xff0c;为避免大量的重复计算&#xff0c;用一个表记录所有已解决的子问题的答案&#xff0c;而在需要的…...

HNOI2014 世界树

洛谷P3233 [HNOI2014]世界树 题目大意 有一棵 n n n个点的树&#xff0c;每个点有一个编号&#xff0c;有 q q q次操作。对于每次操作&#xff0c;给出 m m m个点并称为议事点&#xff0c;树上各个点由离这个点最近的议事点管理&#xff08;如果有多个议事点离这个点最近&…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...

迁移科技3D视觉系统:重塑纸箱拆垛场景的智能革命

一、传统拆垛场景的困局与破局之道 在汽车零部件仓库中&#xff0c;每天有超过2万只异形纸箱需要拆垛分拣。传统人工拆垛面临三大挑战&#xff1a; 效率瓶颈&#xff1a;工人每小时仅能处理200-300件&#xff0c;且存在间歇性疲劳安全隐患&#xff1a;20kg以上重箱搬运导致年…...

Java求职者面试:微服务技术与源码原理深度解析

Java求职者面试&#xff1a;微服务技术与源码原理深度解析 第一轮&#xff1a;基础概念问题 1. 请解释什么是微服务架构&#xff0c;并说明其优势和挑战。 微服务架构是一种将单体应用拆分为多个小型、独立的服务的软件开发方法。每个服务都运行在自己的进程中&#xff0c;并…...

(33)课54:3 张表的 join-on 连接举例,多表查询总结。数据库编程补述及游标综合例题。静态 sqL与动态sqL(可带参数)

&#xff08;112&#xff09;3 张表的 join-on 连接举例 &#xff1a; &#xff08;113&#xff09; 多表查询总结 &#xff1a; &#xff08;114&#xff09;数据库编程补述 &#xff1a; 综合例题 &#xff1a; 以上没有动手练习&#xff0c;不知道这样的语法是否…...