Vue 3中的路由(Router)详解

在现代前端开发中,路由(Routing)是构建单页应用程序(SPA)的核心概念之一。他允许应用根据URL的变化动态地渲染不同的组件或页面。Vue.js提供了官方的路由管理工具——Vue Router。接下来这篇文章将逐步讲解Vue 3 中的路由概念。

什么是路由?

路由其实就是URL与应用程序视图之间的映射关系。
在传统的多页应用里面,每次跳转都是向服务器发送请求,服务器返回新的页面的过程。但是在SPA中,页面并不会刷新,而是根据URL的变化,动态地 加载相应的组件,为实现这一效果,就需要路由系统的管理。

Vue Router 的核心概念

1.路由器(Router)

这个路由器并不是网络服务中用于转发路由的路由器,而是SPA中路由系统的核心的控制页面映射的路由器。
它的功能包括:

  • 监听URL的变化
  • 根据定义的 路由规则,映射到对应的组件。
  • 提供导航方法,控制页面跳转。

2.路由(Route)

路由是路径(Path)与组件(compontent)的对应关系。
一个典型的路由定义包括:

  • path:URL当中的路径部分
  • compontent:当路径匹配时要渲染的组件

3. 路由视图(Router View)

是一个占位组件,告诉 Vue Router 在这里渲染匹配到的组件。

4. 路由链接(Router Link)

组件用于创建导航链接,点击后会改变 URL,并触发路由跳转。

5. 动态路由和参数

动态路由允许在路径中使用变量,例如 /user/:id。可以通过路由参数访问这些变量。

6. 嵌套路由

嵌套路由用于构建具有层级关系的页面结构,即在一个组件内部再嵌套另一个路由视图。

7. 导航守卫

导航守卫用于在路由跳转前、跳转后或解析过程中,添加自定义的逻辑处理,例如权限验证。

三、如何在 Vue 3 中使用 Vue Router

1. 安装 Vue Router

在开始之前,需要安装 Vue Router:

npm install vue-router@4

2. 创建路由器实例

在项目的入口文件(如 main.js)中:

import { createApp } from 'vue';
import { createRouter, createWebHistory } from 'vue-router';
import App from './App.vue';// 导入需要的组件
import Home from './components/Home.vue';
import About from './components/About.vue';// 定义路由
const routes = [{ path: '/', component: Home },{ path: '/about', component: About },
];// 创建路由器实例
const router = createRouter({history: createWebHistory(), // 使用 HTML5 模式routes, // 路由配置
});// 创建并挂载应用
const app = createApp(App);
app.use(router);
app.mount('#app');

3. 定义路由组件

components 目录下创建 Home.vueAbout.vue

<!-- Home.vue -->
<template><div><h1>首页</h1></div>
</template><script>
export default {name: 'Home',
};
</script>
<!-- About.vue -->
<template><div><h1>关于我们</h1></div>
</template><script>
export default {name: 'About',
};
</script>

4. 使用 <router-view> 显示路由组件

App.vue 中:

<template><div id="app"><nav><router-link to="/">首页</router-link>|<router-link to="/about">关于我们</router-link></nav><router-view></router-view></div>
</template>

5. 路由跳转

使用 <router-link> 创建导航链接,或者在脚本中使用编程式导航:

// 在组件内部
export default {methods: {goToAbout() {this.$router.push('/about');},},
};

四、进阶概念

1. 动态路由匹配

定义动态路由:

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

在组件中获取路由参数:

import { useRoute } from 'vue-router';export default {setup() {const route = useRoute();const userId = route.params.id;return {userId,};},
};

2. 嵌套路由

定义嵌套路由:

const routes = [{path: '/user/:id',component: User,children: [{path: 'profile',component: UserProfile,},{path: 'posts',component: UserPosts,},],},
];

在父组件模板中:

<template><div><h2>用户页面</h2><router-view></router-view> <!-- 渲染子路由组件 --></div>
</template>

3. 导航守卫

全局前置守卫:

router.beforeEach((to, from, next) => {// 例如,验证用户是否已登录if (to.path === '/protected' && !isLoggedIn()) {next('/login');} else {next();}
});

路由独享守卫:

const routes = [{path: '/admin',component: Admin,beforeEnter: (to, from, next) => {// 仅管理员可访问if (isAdmin()) {next();} else {next('/login');}},},
];

组件内守卫:

export default {beforeRouteEnter(to, from, next) {// 在路由进入前调用next();},beforeRouteUpdate(to, from, next) {// 在当前路由改变,但组件被复用时调用next();},beforeRouteLeave(to, from, next) {// 在路由离开前调用next();},
};

4. 懒加载路由

通过动态导入实现路由组件的懒加载:

const routes = [{path: '/about',component: () => import('./components/About.vue'),},
];

5. 命名路由和命名视图

命名路由:

const routes = [{path: '/user/:id',name: 'user',component: User,},
];// 导航到命名路由
this.$router.push({ name: 'user', params: { id: 123 } });

命名视图:

const routes = [{path: '/views',components: {default: ViewMain,sidebar: ViewSidebar,},},
];// 在模板中
<template><router-view></router-view><router-view name="sidebar"></router-view>
</template>

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

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

相关文章

TypeScript高级内容

完整总结 本节课涵盖了本地开发环境的搭建、前后端的基本交互、以及如何封装 Axios 以增强代码的安全性和可维护性。此外&#xff0c;我们还解决了在代码实现过程中可能遇到的一些常见问题。 1. 本地环境搭建 安装环境依赖&#xff1a;首先需要在本地安装 Node.js&#xff0…

Linux安装virtualenvwrapper

workon 是 virtualenvwrapper 工具的一部分&#xff0c;用于管理 Python 虚拟环境。如果你看到这个错误&#xff0c;可能是因为 virtualenvwrapper 没有正确安装或配置。 解决步骤 安装 virtualenv 和 virtualenvwrapper 首先&#xff0c;确保你已经安装了 virtualenv 和 virt…

【Java数据结构】 链表

【本节目标】 1. ArrayList 的缺陷 2. 链表 3. 链表相关 oj题目 一. ArrayList的缺陷 上节课已经熟悉了ArrayList 的使用&#xff0c;并且进行了简单模拟实现。通过源码知道&#xff0c; ArrayList 底层使用数组来存储元素&#xff1a; public class ArrayList<E>…

二叉树进阶学习——从中序和后续遍历序列构建二叉树

1.题目解析 题目来源&#xff1a;106.从中序和后序遍历序列构造二叉树 测试用例 2.算法原理 后序遍历&#xff1a;按照左子树->右子树->根节点的顺序遍历二叉树&#xff0c;也就是说最末尾的节点是最上面的根节点 中序遍历&#xff1a;按照左子树->根节点->右子树…

一次解决Go编译问题的经过

用Go语言编写了一个小的项目&#xff0c;项目开发环境是在本地的Windows环境中&#xff0c;一切单元测试和集成测试通过后&#xff0c;计划将项目部署到VPS服务器上自动运行&#xff0c;但在服务器上执行go run运行时&#xff0c;程序没有任何响应和回显&#xff0c;甚至main函…

前端辅助工具分享(像素大厨)

引言&#xff1a; 我们在从事前端开发工作时&#xff0c;常会需要测量许多盒子的尺寸&#xff0c;颜色提取种种&#xff0c;切图&#xff0c;还有文字大小等信息&#xff0c;光从肉眼很难看出来&#xff0c;当然我们传统的会使用Photoshop来帮助我们完成这些工作&#xff0c;但…

【LuBase低代码框架】动态数据源服务介绍

功能介绍&#xff1a; 可以通过配置一个QueryOption对象或者一条select 查询语句&#xff0c;返回当前应用下的数据&#xff0c;避免后端写代码开发。 使用方法&#xff1a; 1. 动态服务需要通过/invoke/datasource和/invoke/datasourceNoRight 地址发起调用 2. 可使用参数…

工程师 - 什么是DRM

DRM 是数字版权管理&#xff08;Digital Rights Management&#xff09;的缩写&#xff0c;是一套用于控制数字内容&#xff08;如音乐、电影、电子书、软件和游戏&#xff09;的访问、共享和分发方式的技术和工具。DRM 的目标是防止未经授权复制、分发和修改受版权保护的数字资…

解决Excel时出现“被保护单元格不支持此功能“的解决办法,详细喂饭级教程

今天有个朋友发过来一个excel文件&#xff0c;本来想修改表格的内容&#xff0c;但是提示&#xff0c;被保护单元格不支持此功能&#xff0c;对于这个问题&#xff0c;找到一个解决方法&#xff0c;现记录下来&#xff0c;分享给有需要的朋友。 表格文件名为aaa.xls,以WPS为例。…

用Python实现运筹学——Day 11: 线性规划的实际应用

一、学习内容 1. 不同领域中线性规划的经典应用场景 线性规划在多个领域中有广泛的应用&#xff0c;常见的应用领域包括&#xff1a; 生产计划与资源分配&#xff1a;用于优化生产调度、资源分配和生产线管理&#xff0c;最大化利润或最小化成本。物流与运输&#xff1a;解决…

【RabbitMQ】面试题

在本篇文章中&#xff0c;主要是介绍RabbitMQ一些常见的面试题。对于前几篇文章的代码&#xff0c;都已经在码云中给出&#xff0c;链接是mq-test: 学习RabbitMQ的一些简单案例 (gitee.com)&#xff0c;如果存在问题的话欢迎各位提出&#xff0c;望共同进步。 MQ的作用以及应用…

.Net 6.0 监听Windows网络状态切换

上次发了一个文章获取windows网络状态&#xff0c;判断是否可以访问互联网。传送门&#xff1a;获取本机网络状态 这次我们监听网络状态切换&#xff0c;具体代码如下&#xff1a; public class WindowsNetworkHelper {private static Action<bool>? _NetworkStatusCh…

【课程学习】Wireless Communications

Goldsmith A. Wireless communications[M]. Cambridge university press, 2005. Wireless Communications 无线通信课程 文章目录 2-Path Loss, Shadowing, and Multipath2.4-Two-Ray Multipath Model时延扩展 delay spread P33 3-Statistical Multipath Channel Models3.3-Wid…

一站式大语言模型API调用:快速上手教程

智匠MindCraft是一个强大的AI工具及开发平台&#xff0c;支持多种大语言模型和多模态AI模型。本文将详细介绍如何通过API调用智匠MindCraft中的大语言模型&#xff0c;帮助开发者快速上手。 注册与登录 访问智匠MindCraft官网&#xff0c;注册并登录账号。 进入开发者平台&…

scrapy爬虫基础

一、初识 创建项目&#xff1a; scrapy startproject my_one_project # 创建项目命令 cd my_one_project # 先进去&#xff0c; 后面在里面运行 运行爬虫命令为&#xff1a;scrapy crawl tk spiders下创建test.py 其中name就是scrapy crawl tk &…

Cpp::STL—string类的使用与理解(上)(8)

文章目录 前言一、string类对象的构造函数string()string(const char* s)string(size_t n, char c)string(const string& s)string(const string& str&#xff0c;size_t pos&#xff0c;size_t len npos) 二、string类对象的容量操作size与lengthcapacitycapacity返回…

缓存穿透、击穿、雪崩及解决方案

在分布式系统中&#xff0c;尤其是使用缓存的系统中&#xff0c;缓存雪崩、缓存穿透和缓存击穿是常见的问题。下面详细说明这三者的定义和解决方案&#xff1a; 1. 缓存穿透 定义&#xff1a;缓存穿透是指请求的数据在缓存和数据库中都不存在。由于每次请求都会直接查询数据库…

Docekrfile和docker compose编写指南及注意事项

Dockerfile 基础语法 我们通过编写dockerfile,将每一层要做的事情使用语法固定下来&#xff0c;之后运行指令就可以通过docker来制作自己的镜像了。 构建镜像的指令&#xff1a;docker build /path -t imageName:tag 注意&#xff0c;docker build后的path必须是dockerfile…

阿里云对象存储OSS 速学

目录 1.创建一个Bucket 2.创建密钥AccessKey 3.在文档中心打开阿里云对象存储OSS 4.参考上传文件示例 以官网的文档为主&#xff0c;我的文章教学为辅 官网有详细的视频介绍&#xff1a; OSS快速入门_对象存储(OSS)-阿里云帮助中心 (aliyun.com)https://help.aliyun.com/…

25考研咨询周开启,西安电子科技大学是否改考408??

学长这几天帮大家问了西安电子科技大学是否会从833、834、953改考为408&#xff1f; 西电老师回复&#xff1a;根据上级文件要求&#xff0c;招生简章以及专业目录会在网上报名开始前公布&#xff0c;专业课不会又大变动&#xff01; 因为大家安心复习即可&#xff0c;保证今…