当前位置: 首页 > news >正文

vue3:路由守卫(全局守卫、路由独享守卫、组件内守卫)

全局守卫

import {createRouter,createWebHashHistory
} from 'vue-router'// 省略了routes 中的路由规则
const routes = [......
]const router = createRouter({history: createWebHashHistory(),routes
})// 全局守卫:登录拦截 本地没有存token,请重新登录
router.beforeEach((to, from, next) => {// 判断有没有登录if (!localStorage.getItem('token')) {if (to.name == "login") {next();} else {router.push('login')}} else {next();}
});export default router

路由独享守卫

{path: '/admin',name: 'admin',component: () => import('../views/mine/admin.vue'),//beforeEnter(to,form.next)=>{判断是否登陆代码},点击进入admin也面时,路由独享守卫启用beforeEnter:(to,form,next)=>{if (!localStorage.getItem('user')) {if (to.name == "login") {next();} else {router.push('login')}} else {next();}}
},

组件内守卫

有些时候我们需要知道是从那一个页面跳转过来的
然后做一些逻辑处理
比如说:
1、order.vue(订单) -> detail.vue(详情)
2、A.vue(商品详情) -> B.vue(确认订单) -> C.vue(支付成功后跳转订单详情) ->detail.vue(详情)
这个时候我们需要使用beforeRouteEnter 来解决页面返回问题

<template><div class="mine"><van-nav-bartitle="订单详情"left-text="返回"left-arrow@click-left="goBack"/><h1>从 {{data.routerIndex}} 页面来</h1></div>
</template>
<script>import { useRouter } from 'vue-router'import { reactive } from 'vue'export default {// 组件内守卫beforeRouteEnter:(to,form,next)=>{//to 到哪里去//form 从哪里来next( vm => {vm.data.routerIndex = form.name;})},setup(){const router = useRouter();var data = reactive({routerIndex:''})let goBack = () =>{// 如果从C.vue来,则返回router.go(-3),回到A.vue,否则正常返回上级页面if(data.routerIndex == 'C'){router.go(-3);}else{router.go(-1);}}return{data,goBack}}}
</script>

原文来自vue3:路由守卫(全局守卫、路由独享守卫、组件内守卫)_vue3路由守卫-CSDN博客,记录下来方便日后学习。

相关文章:

  • 15、网络安全合规由来与要素
  • 应用性能管理工具-SkyWalking
  • 目前最好用的爬虫软件是那个?
  • C++游戏
  • 追梦无Bug的软件世界
  • Web3.0 应用项目
  • Conda虚拟环境配置常见问题记录
  • 微服务sentinel解析部署使用全流程
  • 《RabbitMQ篇》Centos7安装RabbitMQ
  • window java17改成java 8
  • 关于TreeWidget在界面上显示规定小数位数的数据,在后台从界面上读取原始数据的方法
  • 【深度学习】(7)--神经网络之保存最优模型
  • 每日一题|1845. 座位预约管理系统|最小堆操作、优先队列
  • Linux系统中命令wc
  • 用css实现改变图片滤镜
  • Fastjson的基本使用方法大全
  • KMP算法及优化
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • php面试题 汇集2
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • React Native移动开发实战-3-实现页面间的数据传递
  • Shadow DOM 内部构造及如何构建独立组件
  • SQLServer之创建显式事务
  • 官方解决所有 npm 全局安装权限问题
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 解析 Webpack中import、require、按需加载的执行过程
  • 模型微调
  • 前端攻城师
  • 山寨一个 Promise
  • 设计模式 开闭原则
  • 责任链模式的两种实现
  • 字符串匹配基础上
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • # 安徽锐锋科技IDMS系统简介
  • #565. 查找之大编号
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (1)Android开发优化---------UI优化
  • (7)STL算法之交换赋值
  • (SERIES10)DM逻辑备份还原
  • (备忘)Java Map 遍历
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (一)kafka实战——kafka源码编译启动
  • (转)Windows2003安全设置/维护
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .Net CF下精确的计时器
  • .net refrector
  • .net 按比例显示图片的缩略图
  • .Net实现SCrypt Hash加密
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @31省区市高考时间表来了,祝考试成功
  • [15] 使用Opencv_CUDA 模块实现基本计算机视觉程序
  • [2544]最短路 (两种算法)(HDU)