读懂 Vue3 路由:从入门到实战

在构建现代化单页应用(SPA)时,Vue3 凭借其简洁高效的特性成为众多开发者的首选。

而 Vue3 路由(Vue Router)则是 Vue3 生态中不可或缺的一部分,它就像是单页应用的 “导航地图”,帮助用户在不同的页面(组件)之间自由穿梭,同时保证页面的流畅切换,无需刷新整个网页。

一、Vue3 路由的基础概念

1. 什么是路由

路由可以简单理解为 “网址” 与 “页面内容(组件)” 之间的对应关系。

在传统的多页应用中,每一个页面都是一个独立的 HTML 文件,通过超链接跳转时,浏览器会重新加载新的页面。而在单页应用里,整个应用只有一个 HTML 文件,通过路由来控制不同组件的显示与隐藏,从而模拟出页面跳转的效果。

例如,当用户访问 https://example.com/home 时,显示首页组件;访问 https://example.com/about 时,显示关于我们的组件,这就是路由在起作用。

2. Vue Router 的作用

Vue Router 是 Vue.js 官方的路由管理器,专门为 Vue 应用开发设计。它不仅实现了 URL 与组件的映射,还提供了诸如路由嵌套、路由守卫、动态路由等强大功能,让开发者能够轻松构建复杂的单页应用架构,提升用户体验。

二、Vue3 路由的安装与基本使用

1. 安装 Vue Router

在使用 Vue3 路由之前,需要先安装它。如果你的项目是通过 npm 管理依赖,可以在项目根目录下执行以下命令:

npm install vue-router@4

如果你使用的是 yarn,则执行:

yarn add vue-router@4

这里安装的是 Vue Router 4 版本,它完美适配 Vue3。

2. 创建路由实例

安装完成后,在项目中创建一个路由文件,例如 router.js。在该文件中,引入必要的模块并创建路由实例,代码如下:

import { createRouter, createWebHistory } from 'vue-router';
import Home from '../views/Home.vue';
import About from '../views/About.vue';const routes = [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: About}
];const router = createRouter({history: createWebHistory(),routes
});export default router;

在这段代码中:

  • 首先从 vue-router 中引入 createRouter 和 createWebHistory 方法。createRouter 用于创建路由实例,createWebHistory 用于创建基于 HTML5 History API 的路由模式,这种模式下的 URL 更加简洁美观,例如 https://example.com/about,没有多余的哈希符号。
  • 接着引入了两个组件 Home 和 About,它们将作为不同路由对应的显示内容。
  • 然后定义 routes 数组,其中每个对象表示一条路由规则,包含 path(路由路径)、name(路由名称,方便在代码中引用)和 component(对应的组件)。
  • 最后通过 createRouter 方法创建路由实例,并将配置好的 history 和 routes 传入,再将路由实例导出,以便在 Vue 应用中使用。

3. 在 Vue 应用中使用路由

在 main.js 文件中,引入创建好的路由实例,并将其挂载到 Vue 应用上:

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

这样,路由就已经集成到 Vue 应用中了。在 App.vue 文件中,可以使用 <router-view> 组件来显示当前路由对应的组件内容,例如:

<template><div id="app"><router-view></router-view></div>
</template>

同时,还可以使用 <router-link> 组件来创建导航链接,代替传统的 <a> 标签,例如:

<template><div id="app"><router-link to="/">Home</router-link> |<router-link to="/about">About</router-link><router-view></router-view></div>
</template>

此时,点击这些链接,页面会在不刷新的情况下显示对应的组件内容。

三、Vue3 路由的进阶功能

1. 动态路由

在实际应用中,经常会遇到需要传递参数的路由,例如显示用户详情页,每个用户都有一个唯一的 ID。这时就可以使用动态路由,在路由路径中使用参数,示例如下:

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

在上述代码中,:id 就是一个动态参数。当用户访问 https://example.com/user/1 时,1 这个值会被传递到 User 组件中。在 User 组件中,可以通过 this.$route.params.id(在选项式 API 中)或 useRoute().params.id(在组合式 API 中)来获取这个参数值。

2. 路由嵌套

有些页面的结构比较复杂,包含多个子页面,这时候就需要用到路由嵌套。例如,在一个博客应用中,文章详情页可能还包含评论区、相关文章推荐等子模块,每个子模块可以对应一个子路由。路由嵌套的配置方式如下:

const routes = [{path: '/article',name: 'Article',component: Article,children: [{path: ':id',name: 'ArticleDetail',component: ArticleDetail},{path: ':id/comments',name: 'ArticleComments',component: ArticleComments}]}
];

在上述代码中,children 数组定义了 Article 组件的子路由。访问 https://example.com/article/1 会显示 ArticleDetail 组件,访问 https://example.com/article/1/comments 会显示 ArticleComments 组件。

在 Article.vue 组件中,同样需要使用 <router-view> 来显示子路由对应的内容。

3. 路由守卫

路由守卫用于在路由跳转的不同阶段执行一些自定义逻辑,例如验证用户登录状态、记录页面访问日志等。常见的路由守卫有全局守卫、路由独享守卫和组件内守卫。

  • 全局守卫:在 router.js 文件中可以定义全局前置守卫 router.beforeEach 和全局后置钩子 router.afterEach。例如,使用全局前置守卫来验证用户是否登录:
router.beforeEach((to, from, next) => {const isLoggedIn = localStorage.getItem('isLoggedIn');if (to.meta.requiresAuth &&!isLoggedIn) {next('/login');} else {next();}
});

上述代码中,to 表示即将要进入的目标路由对象,from 表示当前导航正要离开的路由,next 是一个函数,调用 next() 表示放行,继续跳转;调用 next('/login') 表示将导航重定向到 /login 路由。

  • 路由独享守卫:在路由配置中,可以为每条路由单独设置守卫,例如:
const routes = [{path: '/admin',name: 'Admin',component: Admin,beforeEnter: (to, from, next) => {// 执行自定义逻辑next();}}
];

  • 组件内守卫:在组件内部定义 beforeRouteEnterbeforeRouteUpdate 和 beforeRouteLeave 方法,用于在组件的路由相关操作时执行逻辑。

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

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

相关文章

Mac M1安装 Docker Desktop 后启动没反应

Mac M1安装 Docker Desktop 后启动没反应 如果在 Mac M1 上安装 Docker&#xff0c;那最好的选择是安装 Docker Desktop但是今天重新安装 Docker Desktop 后&#xff0c;发现点击图标启动怎么也没反应&#xff0c;经过排查后发现换个版本安装就好了&#xff0c;可能是最新的版…

快速上手c语言

快速上手c语言 快速上手c语言关于学c语言的一些信息杂谈第一个C语言程序通过命令行运行c程序Dev-c5.11Visual Studio系列产品 数据类型变量、常量定义变量的方法变量的命名变量的分类变量的使用变量的作用域和生命周期常量 操作符简单介绍语句选择语句循环语句 数组数组定义数组…

Nginx核心功能及正则表达

目录 一&#xff1a;正向代理 1&#xff1a;编译安装nginx &#xff08;1&#xff09;安装支持软件 &#xff08;2&#xff09;创建运行用户、组和日志目录 &#xff08;3&#xff09;编译安装nginx &#xff08;4&#xff09;添加nginx系统服务 2&#xff1a;配置正向代…

npm命令介绍(Node Package Manager)(Node包管理器)

文章目录 npm命令全解析简介基础命令安装npm&#xff08;npm -v检插版本&#xff09;初始化项目&#xff08;npm init&#xff09;安装依赖包&#xff08;npm install xxx、npm i xxx&#xff09;卸载依赖包&#xff08;npm uninstall xxx 或 npm uni xxx、npm remove xxx&…

【Linux】Linux基础概念

一些比较重要的使用Linux的前情提要。 部分经验来源于网络&#xff0c;若有侵权请联系我删除&#xff0c;主要是做笔记的时候忘记写来源了&#xff0c;做完笔记很久才写博客。 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 目录 1 Shell命令参数 2 系统变量…

阿里开源Qwen3:大语言模型的新突破

一、模型概览&#xff1a;丰富的模型家族 Qwen3 系列包含了 2 款混合专家&#xff08;MoE&#xff09;模型与 6 款密集&#xff08;Dense&#xff09;模型&#xff0c;参数量覆盖范围极广&#xff0c;从 0.6B 一直延伸至 235B 。其中&#xff0c;旗舰模型 Qwen3 - 235B - A22B…

数字智慧方案5856丨智慧环保综合解决方案(50页PPT)(文末有下载方式)

资料解读&#xff1a;智慧环保综合解决方案 详细资料请看本解读文章的最后内容。 随着城市化进程的加速和环境问题的日益严峻&#xff0c;智慧环保成为提升城市环境管理水平的重要手段。本文将对智慧环保综合解决方案进行详细解读&#xff0c;探讨其在实际应用中的需求、解决…

基于ssm的网盘管理系统(全套)

一、系统架构 前端&#xff1a;vue | element-ui 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.8 | mysql | maven | tomcat | nodejs 二、代码及数据库 三、功能介绍 01. 注册 02. 登录 03. 管理员-首页 04. 管理员-个人中心 …

PostgreSQL 的 VACUUM 与 VACUUM FULL 详解

PostgreSQL 的 VACUUM 与 VACUUM FULL 详解 一、基本概念对比 特性VACUUMVACUUM FULL定义常规维护操作&#xff0c;清理死元组激进重组操作&#xff0c;完全重写表数据锁级别不阻塞读写(共享锁)排他锁(阻塞所有操作)空间回收只标记空间为可用&#xff0c;不返还OS空间返还操作…

复刻低成本机械臂 SO-ARM100 舵机配置篇(WSL)

视频讲解&#xff1a; 复刻低成本机械臂 SO-ARM100 舵机配置篇&#xff08;WSL&#xff09; 飞特舵机 组装之前需要配置舵机的ID&#xff0c;如下的网址为舵机的资料&#xff0c;实际上用不到&#xff0c;但可以mark在这里 Software-深圳飞特模型有限公司 User Guide里面可以…

Tailwind CSS实战技巧:从核心类到高效开发

使用 Kooboo平台 训练实战技巧&#xff0c;无需配置安装&#xff0c;直接引入CDN就可以在线练习了&#xff01;具体操作流程&#xff1a;进入Kooboo后&#xff0c;选择创建空白站点 -> 站点开发 -> 控制面板 -> 页面 ->新建普通页面 -> 编写代码 一、核心布局类…

【LINUX操作系统】线程操作

了解了线程的基本原理之后&#xff0c;我们来学习线程在C语言官方库中的写法与用法。 1. 常见pthread接口及其背后逻辑 1.1 pthread_create 与线程有关的函数构成了⼀个完整的系列&#xff0c;绝⼤多数函数的名字都是以“pthread_”打头的 • 要使⽤这些函数库&#xff0c;…

【AI面试准备】Azure DevOps沙箱实验全流程详解

介绍动手实验&#xff1a;通过 Azure DevOps 沙箱环境实操&#xff0c;体验从代码提交到测试筛选的全流程。如何快速掌握&#xff0c;以及在实际工作中如何运用。 通过 Azure DevOps 沙箱环境进行动手实验&#xff0c;是快速掌握 DevOps 全流程&#xff08;从代码提交到测试筛选…

VulnHub-DC-2靶机

主机发现 sudo arp-scan -l 以sudo管理员权限扫描本地活动ip地址 Interface: eth0, type: EN10MB, MAC: 08:00:27:22:46:4f, IPv4: 192.168.252.230 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.252.6 4c:5f:70:74:3c:3b …

藏语英语中文机器翻译入门实践

&#x1f3af; 项目目标&#xff1a; 输入藏文句子&#xff0c;自动翻译成英文和中文&#xff08;或输入中文&#xff0c;翻译为英文和藏文&#xff09;。 &#x1f50d; 技术与原理简介 机器翻译&#xff08;Machine Translation, MT&#xff09;是人工智能中自然语言处理&a…

【阿里云大模型高级工程师ACP习题集】2.9 大模型应用生产实践(上篇)

练习题 【单选题】在自然语言处理的法务咨询场景中,以下哪种模型选择最为合适? A. 通用大语言模型 B. 经过数学领域微调的模型 C. 面向法律领域训练的模型 D. 视觉模型 【多选题】以下哪些属于模型非功能性需求?( ) A. 模型对不同语言的支持能力 B. 模型的响应速度要求 C.…

WPF之ProgressBar控件详解

文章目录 1. ProgressBar控件简介2. ProgressBar的基本属性和用法2.1 基本属性2.2 基本用法2.3 代码中修改进度 3. 确定与不确定模式3.1 确定模式&#xff08;Determinate&#xff09;3.2 不确定模式&#xff08;Indeterminate&#xff09; 4. 在多线程环境中更新ProgressBar4.…

IntelliJ IDEA 保姆级安装教程(附安装包)

文章目录 一、下载二、安装三、启动 一、下载 Ultimate 2021.1.1 - Windows x64 (exe) 二、安装 三、启动 首次安装启动 非首次安装启动

Performance API 性能上报

以下是关于 Performance API 性能上报的基本知识点总结: 一、性能监控核心指标体系 1. 关键性能指标(Web Vitals) 指标标准采集方式健康阈值LCP (最大内容绘制)测量加载性能PerformanceObserver≤2.5sFID (首次输入延迟)测量交互响应PerformanceObserver≤100msCLS (累积布…

C语言-指针(一)

目录 指针 内存 概念 指针变量 取地址操作符&#xff08;&&#xff09; 操作符“ * ” 指针变量的大小 注意 指针类型的意义 作用 void * 指针 const修饰指针变量 const放在*前 const放在*后 双重const修饰 指针的运算 1.指针 - 整数 2.指针 - 指针 3.指…