阿珊详解Vue Router的守卫机制

news2025/6/13 20:01:30

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

    • 摘要:
    • 引言:
    • 正文:
      • 1. 🔧 全局守卫
      • 2. 🔧 路由独享的守卫
      • 3. 🔧 组件内的守卫
    • 总结
    • 参考资料:

摘要:

🤔 Vue Router提供了强大的守卫机制,用于在路由跳转前后进行操作和判断。本文将介绍Vue Router的守卫类型及其应用,帮助读者更好地掌握路由管理。👩‍💻

引言:

🌈 Vue.js以其简洁的语法和声明式的数据绑定受到开发者的喜爱。在单页面应用(SPA)中,路由管理是不可或缺的功能。Vue Router作为Vue的路由器库,提供了丰富的功能,其中守卫机制是其中一个重要的特点。本文将带你深入了解Vue Router的守卫机制,并学会如何使用它们来管理路由。🚀

正文:

1. 🔧 全局守卫

类型:全局守卫是对路由跳转的全局控制,可以在路由跳转的前后进行操作。
应用场景:例如,全局判断用户是否登录,根据登录状态决定是否允许访问某个路由。

全局守卫是 Vue Router 提供的全局拦截器,可以在路由导航过程中对请求进行拦截处理。全局守卫有三种类型:beforeEach、beforeEnter 和 afterEach。

  1. beforeEach:在导航守卫中调用,进入路由之前调用。可以通过 next 函数继续导航,或者通过返回 false 取消导航。

  2. beforeEnter:在导航守卫中调用,进入路由之前调用。这个钩子可以访问 tofrom 对象,可以通过 next 函数继续导航,或者通过返回 false 取消导航。

  3. afterEach:在导航守卫中调用,进入路由之后调用。这个钩子可以访问 tofrom 对象,但是不能取消导航。

以下是一个简单的示例:

// 导入 Vue 和 Vue Router
import Vue from 'vue';
import VueRouter from 'vue-router';

// 注册 Vue Router
Vue.use(VueRouter);

// 定义路由
const routes = [
  {
    path: '/',
    name: 'Home',
    component: HomeComponent,
  },
  {
    path: '/about',
    name: 'About',
    component: AboutComponent,
  },
];

// 创建 router 实例
const router = new VueRouter({
  mode: 'history',
  routes,
});

// 在全局守卫中使用 beforeEach
router.beforeEach((to, from, next) => {
  console.log('全局守卫 - beforeEach');
  next();
});

// 在全局守卫中使用 beforeEnter
router.beforeEnter((to, from, next) => {
  console.log('全局守卫 - beforeEnter');
  next();
});

// 在全局守卫中使用 afterEach
router.afterEach((to, from) => {
  console.log('全局守卫 - afterEach');
});

// 导出 router 实例
export default router;

在这个示例中,我们定义了全局守卫,分别在进入路由之前、进入路由之后和导航守卫中调用。当导航到不同的路由时,会打印相应的全局守卫日志。

2. 🔧 路由独享的守卫

类型:路由独享的守卫是指对单个路由进行控制,可以在进入或离开路由时进行操作。
应用场景:例如,进入某个路由前检查权限,或者离开某个路由前保存数据。

路由独享的守卫是 Vue Router 提供的在特定路由上拦截器,可以在路由导航过程中对请求进行拦截处理。路由独享的守卫通过在路由对象上定义 beforeEnter 属性来实现。

下面是一个简单的示例:

const routes = [
  {
    path: '/',
    name: 'Home',
    component: HomeComponent,
    beforeEnter: (to, from, next) => {
      // 在这里编写拦截逻辑
      if (/* 满足条件 */) {
        next(); // 继续导航
      } else {
        next('/login'); // 跳转到登录页面
      }
    },
  },
  {
    path: '/about',
    name: 'About',
    component: AboutComponent,
  },
];

在这个示例中,我们为 / 路由添加了 beforeEnter 属性,当导航到 / 路由时,会先执行 beforeEnter 中的逻辑,如果满足条件,则继续导航,否则跳转到登录页面。

需要注意的是,路由独享的守卫只对当前路由生效,不会影响其他路由的导航。

3. 🔧 组件内的守卫

类型:组件内的守卫是对组件路由的局部控制,可以在组件加载、更新或销毁时进行操作。
应用场景:例如,在组件加载时获取数据,或者在组件更新时进行数据更新。

组件内的守卫是 Vue Router 提供的在组件内部拦截器,可以在路由导航过程中对请求进行拦截处理。组件内的守卫有三种类型:beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave

  1. beforeRouteEnter:在导航守卫中调用,进入路由之前调用。此时,组件实例还没有被创建。可以通过 next 函数继续导航,或者通过返回 false 取消导航。

  2. beforeRouteUpdate:在导航守卫中调用,路由更新之前调用。此时,组件实例已经被创建,可以通过 next 函数继续导航,或者通过返回 false 取消导航。

  3. beforeRouteLeave:在导航守卫中调用,离开路由之前调用。此时,组件实例已经被创建,可以通过 next 函数继续导航,或者通过返回 false 取消导航。

以下是一个简单的示例:

export default {
  name: 'App',
  beforeRouteEnter(to, from, next) {
    console.log('组件内守卫 - beforeRouteEnter');
    next();
  },
  beforeRouteUpdate(to, from, next) {
    console.log('组件内守卫 - beforeRouteUpdate');
    next();
  },
  beforeRouteLeave(to, from, next) {
    console.log('组件内守卫 - beforeRouteLeave');
    next();
  },
};

在这个示例中,我们定义了组件内的守卫,分别在进入路由之前、路由更新之前和离开路由之前调用。当导航到不同的路由时,会打印相应的组件内守卫日志。

需要注意的是,组件内的守卫只能拦截当前组件的导航,无法拦截其他组件的导航。

总结

Vue Router的守卫机制是其强大的功能之一,通过全局守卫、路由独享的守卫和组件内的守卫,我们可以在路由跳转的前后进行各种操作和判断,从而实现对路由的精细化管理。在实际开发中,根据项目需求合理使用守卫机制,可以使我们的Vue应用更加安全和高效。🚀

参考资料:

  1. Vue Router官方文档
  2. Vue.js官方文档:路由

🌟 感谢您的阅读!如果您有任何疑问或建议,欢迎在评论区留言。💬

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

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

相关文章

nginx代理minio客户端

错误方式 在点击桶名查看文件时, 会一直处于loading加载中 worker_processes 1; #设置 Nginx 启动的工作进程数为 1。events {worker_connections 1024; ##设置每个工作进程的最大并发连接数为 1024。 }http {include mime.types; #该文件定义了文件扩展名和 MIME 类型…

AJAX学习(一)

版权声明 本文章来源于B站上的某马课程,由本人整理,仅供学习交流使用。如涉及侵权问题,请立即与本人联系,本人将积极配合删除相关内容。感谢理解和支持,本人致力于维护原创作品的权益,共同营造一个尊重知识…

全网最新最全的Jmeter接口测试:jmeter_定时器

固定定时器 如果你需要让每个线程在请求之前按相同的指定时间停顿,那么可以使用这个定时器;需要注意的是,固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间 1、使用固定定时器位置在http请求中&#xf…

CVHub | 初识langchain,3分钟快速了解!

本文来源公众号“CVHub”,仅用于学术分享,侵权删,干货满满。 原文链接:初识langchain 1 什么是langchain langchain[1]是一个用于构建LLM-Based应用的框架,提供以下能力: 上下文感知:可以为LLM链接上下文…

汽车零部件制造中的信息抽取技术:提升效率与质量的关键

一、引言 在汽车制造业中,零部件的生产是整个制造流程的关键一环。这些零部件,包括但不限于制动系统、转向系统和传动系统,是确保汽车安全、可靠运行的基础。为了满足现代汽车工业对效率和质量的严格要求,制造商们纷纷投入到高度…

jvm堆概述

《java虚拟机规范》中对java堆的描述是:所有的对象实例以及数组都应当在运行时分配在堆上。 一个JVM实例只存在一个堆内存(就是new 出来一个对象),java内存管理的核心区域 java堆区在jvm启动的时候就被创建,空间大小确定。是jvm管理的最大一…

探索代理服务器:保护您的网络安全与隐私

🍎个人博客:个人主页 🏆个人专栏:Linux ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 隐藏真实IP地址: 访问控制: 加速访问速度: 过滤内容: 突破访问限制&#xff1…

深入浅出计算机网络 day.1 概论③ 电路交换、分组交换和报文交换

人无法同时拥有青春和对青春的感受 —— 04.3.9 内容概述 01.电路交换、分组交换和报文交换 02.三种交换方式的对比 一、电路交换、分组交换和报文交换 1.电路交换 计算机之间的数据传送是突发式的,当使用电路交换来传送计算机数据时,其线路的传输效率一…

MUMU模拟器12连logcat的方法

大家好,我是阿赵。   在开发手机游戏的时候,在真机上会出现各种问题,在查询问题的时候,安卓手机需要用adb连接来连接手机看logcat输出分析问题。但由于连接手机比较麻烦,所以我都习惯在电脑用安卓模拟器来测试。   …

启动项目报502怎么处理呢?

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。 💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精…

C#中对象的相等性与同一性的判断方法总结

C#对象的相等性与同一性 1. 概述与准备1.1 概述1.2 准备 2. Equals(Object)2.1 功能:2.2 实例:2.3 扩展:2.4 重写此方法 3. Equals(Object, Object)3.1 功能3.2 实例 4. ReferenceEquals(Object, Object)4.1 功能4.2 使用场景:4.3…

成人商务英语,外贸英语纺织英语日常交流口语柯桥学外语

大家好,今天我们要说的这个短语,跟香蕉Banana有关,它就是top banana。 不过它可不是字面上的“顶级香蕉”的意思哦~ Top banana是一个俚语,常见的意思有两个: 1. the most important person in any group 一群人中最…

第14章 西瓜书——概率图模型

概率图模型 概率图模型(Probabilistic Graphical Model)是用图结构来表示多元随机变量之间条件依赖关系的模型。在图模型中,节点表示随机变量,边表示变量之间的依赖关系。概率图模型可以分为有向图模型(如贝叶斯网络&a…

C#与欧姆龙PLC实现CIP通讯

参考文档: 欧姆龙PLC使用-CSDN博客 CIP通讯介绍(欧姆龙PLC)-CSDN博客 使用NuGet添加引用:CIPCompolet 基础参考我的CIP协议介绍,默认TCP端口为:44818 类NXCompolet 类的功能可以在安装PLC开发软件后帮…

【io.net空投】交互攻略

一、io.net是什么 Io.net 是一个基于 Solana 的DePIN项目,为人工智能 (AI) 和机器学习 (ML) 公司聚合 GPU 资源。 Io.net 的例子,就是鼓励大家出借 GPU 算力,为 AI 或机器学习(ML)公司提供更低价、更有效率的算力资源…

STM32时钟树

1、STM32时钟框图

DHCP中继实验(华为)

思科设备参考: 一,技术简介 DHCP中继,可以实现在不同子网和物理网段之间处理和转发DHCP信息的功能。如果DHCP客户机与DHCP服务器在同一个物理网段,则客户机可以正确地获得动态分配的IP地址。如果不在同一个物理网段,…

Python算法题集_在排序数组中查找元素的第一个和最后一个位置

Python算法题集_在排序数组中查找元素的第一个和最后一个位置 题34:在排序数组中查找元素的第一个和最后一个位置1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【二分法两次左边界】2) 改进版一【二分法左右边界】3) 改进版二【第三…

操作系统原理与实验——实验五时间片轮转进程调度

实验指南 运行环境: Dev c 算法思想: 将处理机的运行时间划分成等长的时间片,转轮式分配给各个就绪进程使用。 采用此算法的系统中,所有就绪进程按照先来先服务的原则排成一个队列,每次调度时将处理机分派给队首进程。…

基于梯度统计学的渐变型亮缝识别算法

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一、场景痛点 在图像处理相关的实际工程中,会出现各式各样的现实复杂问题,有的是因为机械设计导致&#x…