阿珊详解Vue Router的守卫机制

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过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.hqwc.cn/news/525196.html

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

相关文章

回溯算法09-子集II(Java/子集问题的去重方法)

9.子集II 题目描述 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。 示例 1: 输入&#xf…

Angular基础---HelloWorld---Day2

文章目录 1.循环语句: *ngfor2.循环语句:ngSwitch4.事件的绑定:click5.事件的绑定:input6.模版引用变量7.数据双向绑定ngModel8.动态表单控件9.动态表单空间组 文末附有代码仓库地址!!! 1.循环语句: *ngfor…

Qt自定义控件

自定义控件 目的:将多个控件或者窗口作为一个整体被多次复用。 操作方式 1.首先进行自定义的ui设计,以及对应的.h和.cpp文件 2.到要使用的UI界面上,从控件库中拖拽一个Widget控件 3.右键点击"提升为" 4.填写自定义实现的类名&…

指纹加密U盘/指纹KEY方案——采用金融级安全芯片 ACH512

方案概述 指纹加密U盘解决方案可实现指纹算法处理、数据安全加密、数据高速存取(EMMC/TF卡/NandFlash),可有效保护用户数据安全。 方案特点 • 采用金融级安全芯片 ACH512 • 存储介质:EMMC、TF卡、NandFlash • 支持全系列国密…

Web Worker:JavaScript的后台任务解决方案

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

程序如何知道mqtt设备是否在线

在做物联网设备的时候经常会碰到设备的在线与掉线 问题:emqx如何来实现这个在线与掉线 实现:添加一个规则,程序监控这个规则 1、SELECT * FROM "$events/client_connected", "$events/client_disconnected" 2、添加一…

MATLAB读取.nc(数据集)文件

MATLAB读取.nc(数据集)文件 以中国1km逐月潜在蒸散发数据集(1901-2022)为例 首先用FileZilla下载特定年份的数据集 用matlab进行处理,代码如下: clear;clc;ncdisp("pet_2022.nc") %读数据集的具体信息和变量eva ncr…

【数据分享】2013-2022年全国范围逐月CO栅格数据(免费获取)

空气质量数据是在我们日常研究中经常使用的数据!之前我们给大家分享了2000-2022年全国范围逐月的PM2.5栅格数据和2013-2022年全国范围逐月SO2栅格数据(可查看之前的文章获悉详情)。 本次我们给大家带来的是2013-2022年全国范围的逐月的CO栅格…

Full GC的认识、预防和定位

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ 👀👀👀 个人博客:小奥的博客 👍👍👍:个人CSDN ⭐️⭐️⭐️:传送门 🍹 本人24应届生一枚,技术和水平有限&am…

【算法沉淀】最长回文子串

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《数据结构与算法:初学者入门指南》📘&am…

markdown页面宽度放宽

变成以上样式 ------------------------------------------------ 然后最后一行加上 #write{ max-width: 90%; } /* 调整源码正文宽度 */ #typora-source .CodeMirror-lines { max-width: 90%; } /* 调整输出 PDF 文件宽度 */ media print { #write{ max-w…

添加路障-蓝桥杯-DFS

自己另辟蹊径想的新思路 果然好像还是不太行呀 import java.util.Scanner;public class Main {static int T;//样例组数static int n;//矩阵大小static int[] X {0,1,0,-1};static int[] Y {1,0,-1,0};static int[] X1 {1,0,-1,0};static int[] Y1 {0,-1,0,1};static int …