Vue.js中的路由导航守卫和其使用方法

Vue.js 中的路由导航守卫是 Vue Router 提供的一套机制,用于在路由切换的过程中执行自定义代码逻辑,包括但不限于权限验证、页面滚动位置保存、加载数据等。它分为三种类型:

  1. 全局前置守卫 (Global beforeEach Guard)
    全局前置守卫应用在整个应用程序的路由跳转之前,不论你访问任何路由都会触发。注册全局前置守卫通过调用 router.beforeEach 方法,并传入一个回调函数。这个回调函数接收三个参数:

to: Route: 即将要进入的目标路由对象。
from: Route: 当前导航正要离开的路由对象。
next: Function: 调用该函数进行下一步操作。它可以接受一个可选的参数(通常是一个错误对象),决定是否以及如何继续导航流程。

import { createRouter, createWebHistory } from 'vue-router';
import routes from './routes';const router = createRouter({history: createWebHistory(),routes,
});router.beforeEach((to, from, next) => {// 在这里可以执行异步操作,例如检查用户登录状态if (!isAuthenticated) {next('/login');} else {next();}
});
  1. 全局解析守卫 (Global afterEach Guard)
    除了前置守卫,Vue Router 还提供了全局后置守卫 (router.afterEach),这个守卫会在每次导航完成,即将激活组件渲染之后触发,但不涉及阻止或更改导航过程。
router.afterEach((to, from) => {// 可以在这里记录路由历史、页面浏览统计等操作
});
  1. 路由独享守卫 (Per-Route Guard)
    可以在单个路由配置中定义前置守卫和/或后置守卫,这些守卫仅针对特定路由生效:
{path: '/admin',component: AdminPanel,beforeEnter: (to, from, next) => {// 执行特定于 /admin 路由的权限检查或其他操作if (canAccessAdmin()) {next();} else {next({ name: 'access-denied' });}},
}
  1. 组件内的守卫 (In-Component Guards)
    在单个路由组件内,有三种类型的守卫:

beforeRouteEnter: 组件实例还未创建时就已存在的守卫,不能直接访问组件实例,可以通过 next(vm => {}) 访问组件实例并传递给回调函数。

export default {beforeRouteEnter(to, from, next) {next(vm => {vm.title = to.meta.title; // 设置组件标题});},
};

beforeRouteUpdate: 当路由的 params 或 query 发生变化(即当前路由路径不变,只有参数变化)时触发,此时可以直接访问组件实例。

export default {beforeRouteUpdate(to, from, next) {this.loadData(to.params.id); // 更新组件数据next();},
};

beforeRouteLeave: 导航离开当前路由时触发,可以用来确认是否允许离开。

export default {data() {return {unsavedChanges: false,};},methods: {confirmNavigation() {// 用户确认逻辑...},},beforeRouteLeave(to, from, next) {if (this.unsavedChanges) {this.confirmNavigation().then(() => next()).catch(() => next(false));} else {next();}},
};

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

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

相关文章

python科学计算库之Numpy库的使用的简单习题

Numpy库 Numpy(Numerical Python的缩写)是一个开源的Python库,用于进行科学计算。它提供了一个高性能的多维数组对象(ndarray)及用于处理这些数组的各种工具和函数。由于其高效和灵活的数据结构以及丰富的功能&#x…

Google 地图 API 教程--干货(1/2)

Google Maps API 教程 在本教程中我们将学习如何使用谷歌地图API V3创建交互式地图。 什么是 API? API = 应用程序编程接口(Application programming interface)。 API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用接口,…

【d34】【Java】【力扣】27. 移除元素

题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长…

案例介绍:汽车售后服务网络构建与信息抽取技术应用(开源)

一、引言 在当今竞争激烈的汽车行业中,售后服务的质量已成为品牌成功的关键因素之一。作为一位经验丰富的项目经理,我曾参与构建一个全面的汽车售后服务网络,旨在为客户提供无缝的维修、保养和配件更换服务。这个项目的核心目标是通过高效的…

spring、springmvc、springboot框架的介绍

前言 我们已经学过Spring,SpringMVC,SpringBoot了,那这三者之间有没有联系或者区别呢? spring是一个一站式的轻量级java开发的框架,那我们刚开始使用spring的时候,是需要配置很多的配置文件以及繁琐的过程…

状态机实现双击、短按、长按等按键识别检测算法

1、按键识别算法的作用 按键识别算法在不同的技术和应用背景下有不同的作用,但其核心目标都是准确、可靠地检测和区分用户通过物理或虚拟按键所执行的操作。按键识别算法在各类电子设备及系统中起到至关重要的作用,它确保了人机交互的有效性和准确性&…

Vue前端+快速入门【详解】

目录 1.Vue概述 2. 快速入门 3. Vue指令 4.表格信息案例 5. 生命周期 1.Vue概述 1.MVVM思想 原始HTMLCSSJavaScript开发存在的问题:操作麻烦,耦合性强 为了实现html标签与数据的解耦,前端开发中提供了MVVM思想:即Model-Vi…

Mysql-主从架构篇(一主多从,半同步案例搭建)

主从架构 主从架构有什么用? 通过搭建MySQL主从集群,可以缓解MySQL的数据存储以及访问的压力。 数据安全(主备):给主服务增加一个数据备份。基于这个目的,可以搭建主从架构,或者也可以基于主…

GO语言学习笔记(与Java的比较学习)(九)

读写数据 读取用户的输入 最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数。 Scanln 扫描来自标准输入的文本,将空格分隔的值依次存放到后续的参数内,直到碰到换行。Scanf 与其类似,除了 Scanf 的第一个参数用作格式字符串&…

大数据开发(Java面试真题-卷三)

大数据开发(Java面试真题) 1、简要介绍以下JVM有几种垃圾收集器?2、Java中Synchronized的底层原理是什么?3、Java String为什么是不可变的?为什么要设计成不可变?4、泛型?5、常用的反射方法&…

深入Java日志框架及其最佳实践

概述 在Java应用开发中,日志框架是确保应用稳定性和可观察性的关键组件。它帮助开发者记录应用的行为、诊断问题,并监控系统的健康状况。随着Java生态系统的不断发展,各种日志框架也应运而生,各有特点和优势。本文将详细探讨几个…

redis进阶(一)

文章目录 前言一、Redis中的对象的结构体如下:二、压缩链表三、跳跃表 前言 Redis是一种key/value型数据库,其中,每个key和value都是使用对象表示的。 一、Redis中的对象的结构体如下: /** Redis 对象*/ typedef struct redisO…

c# .net8 香橙派orangepi + hc-04蓝牙 实例

这些使用c# .net8开发,硬件 香橙派 orangepi 3lts和 hc-04蓝牙 使用场景:可以通过这个功能,手机连接orangepi进行wifi等参数配置 硬件: 1、带USB口的linux开发板orangepi 2、USB 转TTL 中转接蓝牙(HC-04) 某宝上买…

Vue的响应式原理是如何实现的

Vue的响应式原理主要**基于JavaScript的Object.defineProperty方法实现**。具体如下: 1. 数据劫持(Data Hijacking) Vue在初始化时,会遍历data对象中的所有属性,并使用Object.defineProperty将这些属性转换为getter/s…

Flink:Temporal Table Function(时态表函数)和 Temporal Join

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…

AR时间序列模型

AR时间序列模型(AutoRegressive Time Series Model)是一种用于分析和预测时间序列数据的统计模型。该模型假设未来的观测值与过去的观测值相关,且该相关性可以通过线性回归来描述。 AR模型的基本思想是将当前时刻的观测值表示为过去几个时刻…

设计模式(十五)状态模式

请直接看原文:设计模式系列 ------------------------------------------------------------------------------------------------------------------------------- 前言 建议在阅读本文前先阅读设计模式(十一)策略模式这篇文章,虽说状态…

java.sqlrecoverableexception: io error: the network adapter could not establ

数据库相关学习资料下载地址: 数据库相关资料合集 Java SQLRecoverableException: IO Error: The Network Adapter Could Not Establish Connection 在进行Java开发中,经常会遇到与数据库进行交互的情况。然而,有时候我们可能会遇到java.sq…

Redis过期删除策略

1、定时删除: 一旦键过期就立即从内存中删除,节省内存空间,但删除过程会占用大量CPU时间,可能影响服务器的响应时间和吞吐量。 2、惰性删除: 并不会立即从内存中删除过期键,而是在需要访问时才会检查是否…

【MATLAB】MVMD_ MFE_SVM_LSTM 神经网络时序预测算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 MVMD_MFE_SVM_LSTM神经网络时序预测算法结合了多变量多尺度分解(MVMD)、多尺度特征提取(MFE)、支持向量机(SVM)和长…