vue3 导航守卫

Vue 3 的导航守卫与 Vue 2 相比,在 API 和使用方式上并没有太大的变化,但 Vue 3 的响应式系统和 Composition API 为导航守卫提供了更多的灵活性。
以下是 Vue 3 中常见的几种导航守卫:

1. 全局前置守卫

全局前置守卫在路由跳转前执行。你可以使用 【router.beforeEach】 注册一个全局前置守卫:import { createRouter, createWebHistory } from 'vue-router'  const router = createRouter({  history: createWebHistory(),  routes: [/* ...你的路由对象... */],  
})  
router.beforeEach((to, from, next) => {  // 在这里执行你的逻辑  // 例如,检查用户是否已登录  const isLoggedIn = /* ...获取是否登录的逻辑.. */;  if (isLoggedIn) {  next(); // 允许路由跳转  } else {  next('/login'); // 阻止路由跳转,并重定向到登录页面  }  
})

2. 全局后置守卫

全局后置守卫在路由跳转后执行。你可以使用 【router.afterEach】 注册一个全局后置守卫:router.afterEach((to, from) => {  // 在这里执行你的逻辑  // 例如,发送一个分析事件  analytics.trackPageView(to.path);  
})

3. 路由独享的守卫

你可以在每个路由配置对象中定义 【beforeEnter 】守卫:const routes = [  {  path: '/user/:id',  component: User,  beforeEnter: (to, from, next) => {  // 在这里执行你的逻辑  // 例如,检查用户是否有权限访问该页面  const hasPermission = /* ...获取你的权限.. */;  if (hasPermission) {  next();  } else {  next('/forbidden');  }  },  },  // ... 其他路由  
]

4. 组件内的守卫

在组件内部,你可以使用 【beforeRouteEnter、beforeRouteUpdate 和 beforeRouteLeave】守卫:<script>  
import { onBeforeRouteEnter, onBeforeRouteUpdate, onBeforeRouteLeave, ref } from 'vue';  export default {  setup() {  const someData = ref(null);  // 组件被渲染前调用  onBeforeRouteEnter((to, from, next) => {  // 注意:这里不能访问组件的响应式状态或 `setup` 中的局部变量  // 因为组件实例还没有被创建  next(vm => {  // 当组件实例创建后,可以通过 vm 访问  // 但通常我们不需要这么做,因为守卫逻辑可以在 `setup` 中处理  });  });  // 当前路由改变,但组件被复用时调用  onBeforeRouteUpdate((to, from, next) => {  // 可以访问 `setup` 中的响应式状态  console.log('Route updated:', to.path);  next();  };  // 导航离开组件时调用  onBeforeRouteLeave((to, from, next) => {  // 可以访问 `setup` 中的响应式状态  if (someData.value) {  const answer = window.confirm('你确定要离开吗?你的数据尚未保存。');  if (answer) {  next();  } else {  next(false);  }  } else {  next();  }  };  // 组件的逻辑...  // 返回响应式状态或其他计算属性、方法等  return {  someData,  // ...  };  },  
};  
</script>

注意项

1. 注意next的使用,不能在一个导航钩子内调用两次!!
以下错误示例:
// 错误示例
router.beforeEach((to, from, next) => {if (to.name !== 'Login' && !isAuthenticated) next({ name: 'Login' })// 如果用户未能验证身份,则 `next` 会被调用两次next()
})2. next 函数必须被调用,否则导航将不会解析或更新 URL3. 在全局守卫和路由独享的守卫中,next 函数接受一个位置参数,表示要导航到的下一个位置。
next({ name: 'Login' })  //导航到name为Login的路由
4. 如果传入 false,则导航会被终止。
next(false)  //终止导航
5. 在组件内的守卫中,beforeRouteEnter 守卫的 next 函数接受一个回调函数作为参数,该回调函数在组件实例被创建后执行。如下:next(vm => {  // 当组件被渲染后,你可以通过 `vm` 访问组件实例  });  

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

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

相关文章

智慧公园:AI智能分析网关V4城市公园视频智能监管方案

一、背景分析 随着天气渐渐转暖&#xff0c;城市公园的花卉也逐渐盛开&#xff0c;春暖花开时节&#xff0c;前往公园赏花游玩的城市居民也渐渐多起来&#xff0c;因此安全问题也成为相关监管部门的重要管理任务之一。随着科技的不断进步&#xff0c;智能监控技术已经成为现代…

小程序SSL证书

小程序已成为我们日常生活中不可或缺的一部分。为了让用户的每一次点击、每一次交互都安全无忧&#xff0c;我们引入了专业级的SSL证书服务&#xff0c;为您的小程序构筑坚不可摧的信息安全壁垒。 SSL证书&#xff0c;如同一把无形的加密锁&#xff0c;它将小程序中的所有数据流…

.net 8 使用学习小记

单例模式 public class Singleton {private static Singleton instance null;private static readonly object syncRoot new object();private Singleton() { }public static Singleton Instance{get{if (instance null){lock (syncRoot){if (instance null){instance ne…

使用vue的element组件上传excel文件

在Vue.js项目中&#xff0c;如果你想要上传Excel文件&#xff0c;并且正在使用Element UI组件库&#xff0c;你可以利用 ​<el-upload>​组件来实现上传功能。以下是一个简单的例子&#xff0c;演示了如何使用Element UI上传Excel文件。 首先&#xff0c;在你的Vue组件模…

npm淘宝镜像registry.npmmirror.com设置无效的解决办法

一、问题描述 [17:08:51] npm ERR! code CERT_HAS_EXPIRED [17:08:51] npm ERR! errno CERT_HAS_EXPIRED [17:08:51] npm ERR! request to https://registry.npm.taobao.org/yorkie/download/yorkie-2.0.0.tgz failed, reason: certificate has expired由于原来的淘宝镜像 reg…

gateway网关指定路由响应超时时间

gateway网关指定路由响应超时时间 spring:cloud:gateway:httpclient:responseTimeout: 10000这个配置用于设置HttpClient的响应超时时间&#xff0c;单位是毫秒。具体来说&#xff0c;这个配置表示当Gateway向后端服务发出请求后&#xff0c;如果在10秒内没有收到后端服务的响…

拥抱DevOps,开启数字化转型的加速器

在数字化浪潮席卷全球的今天&#xff0c;企业面临着前所未有的挑战与机遇。为了保持竞争力并适应快速变化的市场需求&#xff0c;数字化转型已成为企业发展的必由之路。而在这一过程中&#xff0c;DevOps作为一种全新的开发与运维理念&#xff0c;正逐渐成为推动企业数字化转型…

Elasticsearch7.10.2安装在EC2上面

问题 由于skywalking需要一个ES数据库&#xff0c;所以&#xff0c;这里在AWS的EC2上面安装一个ES。 安装ES7.10 ES7.11以上的版本有商业限制。所以这里安装7.11以下的版本。 # 下载rpm安装包 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-os…

【FAQ】BSV区块链代码库常见问题解答

​​发表时间&#xff1a;2024年2月27日 BSV区块链协会上线了JavaScript和TypeScript SDK&#xff08;即“标准开发工具包”&#xff09;。TypeScript SDK旨在为开发者提供新版统一核心代码库&#xff0c;让开发者可以在BSV区块链上便捷地进行开发&#xff0c;尤其是开发那些可…

ETH Gas 之 Base Fee Priority Fee

前情回顾 ETH网络 之 Gas EIP-1559 EIP-1559 EIP-1559是以太坊改进提案&#xff08;Ethereum Improvement Proposal&#xff09;&#xff0c;旨在改进以太坊的交易费用机制。该提案引入了一种新的交易费用模型&#xff0c;以提高交易费用的可预测性和网络的效率。我们本文各…

按面积筛选填充二值图中的孔洞-python源码

目录 &#x1f64b;&#x1f64b;需求 &#x1f345;&#x1f345;解决方案 &#x1f64b;&#x1f64b;需求 前提条件是二值图中0是背景&#xff0c;255是前景。 二值化后的影像中有很多小孔洞&#xff0c;现在需要按孔洞面积进行筛选&#xff0c;填充面积小于阈值的孔洞&…

web学习笔记(四十一)

目录 1.生成器Generator 2.解决回调地狱的三种方法 3. Promise对象 3.1什么是Promise对象 3.2Promise对象解决异步地狱问题 3.3Promise对象的三种状态和两个过程 3.4Promise的then方法 1.生成器Generator 生成器主要用来解决异步操作的问题。是一个异步编程的解决方案&a…

EasyExcel 导出动态表格

EasyExcel 导出动态表格 一般推荐使用方法二&#xff0c;但方法一也一定要看&#xff0c;会有很多收获。 需求 &#xff1a;前端选择对应列&#xff0c;导出对应列的数据&#xff0c;比如前端选择了 姓名、名称、学号列 那么就需要导出如下表格&#xff1a; ok&#xff0c;需…

面试题 之 react

1.说说对react的理解 1️⃣是什么 React是用于构建用户界面的 JavaScript 库,遵循组件设计模式、声明式编程范式和函数式编程概念&#xff0c;更高效使用虚拟 DOM 来有效地操作 DOM &#xff0c;遵循从高阶组件到低阶组件的单向数据流。 react 类组件使用一个名为 render() 的方…

爬虫高阶(一):解决验证码及爬取知网论文数据

爬取知网论文数据 解决验证码实现过程代码解决验证码 首先我们必须要识别出验证码,才能让进行下一步。 分享一个好用的网站 云码 接着按照流程操作来得到积分,点击个人中心查看自己的token即可(会用到,一次大约10积分,初始有300免费积分,1元能有1000积分) 实现过程…

[AIGC] MySQL与PostgreSQL事务完整性的对比

事务完整性是数据库管理系统最为重要的特性之一。在简单的术语中&#xff0c;一个事务可以被定义为一个逻辑单元的工作&#xff0c;它一旦被提交&#xff0c;要么全部成功&#xff0c;要么全部失败。这种“全部或无”的特性体现了一个数据库事务的原子性&#xff0c;是保证数据…

elementUI组件库样式修改整理

一、整体修改样式注意点 避免!important&#xff0c;能使用深度选择器就用深度选择器主题色使用变量&#xff0c;方便后期统一修改&#xff0c;最好新建一个单独的文件&#xff0c;专门用于定义公共变量样式文件尽量放在一个文件里&#xff0c;方便后期维护 二、单独element …

Css提高——Css3盒子模型border-box

1、盒子模型的种类与区别 CSS3 中可以通过 box-sizing 来指定盒模型&#xff0c;有2个值&#xff1a;即可指定为 content-box、border-box&#xff0c;这样我们 计算盒子大小的方式就发生了改变。 CSS3 盒子模型 可以分成两种情况&#xff1a; 1. box-sizing: content-box 盒…

安卓面试题多线程 111-115

111. 简述在 Java 中 Executor 和 Executors 的区别 ?Executors 工具类的不同方法按照我们的需求创建了不同的线程池,来满足业务的需求。 Executor 接口对象能执行我们的线程任务。 ExecutorService 接口继承了 Executor 接口并进行了扩展,提供了更多的方法我们能获得任务执…

ArcGIS Pro与R:携手优化生态系统服务评估流程

生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用&#xff0c;是人类直接或间接从生态系统中得到的各种惠益。联合国千年生态系统评估&#xff08;Millennium ecosystem assessment&#xff0c;MA&#xff09;提出生态系统服务包括供给、调节、…