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

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-bar
		  title="订单详情"
		  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博客,记录下来方便日后学习。


http://www.kler.cn/a/320711.html

相关文章:

  • stringRedisTemplate.execute执行lua脚本
  • matlab编写分段Hermite插值多项式
  • 新兴的开源 AI Agent 智能体全景技术栈
  • Web枚举:深入了解目标应用系统
  • Idea-离线安装SonarLint插件地址
  • 1.2.1-2部分数据结构的说明02_链表
  • XML:DOM4j解析XML
  • Swoole 高性能高并发 PHP 协程框架
  • 【手机马达共振导致后主摄马达声音异常】
  • 深入理解华为仓颉语言的数值类型
  • IP地址的打卡路径是什么?
  • 滚雪球学SpringCloud[10.2讲]:微服务项目的性能优化与调优
  • shell脚本(9.20)
  • MATLAB在无线通信系统部署与维护中的应用
  • [M二分答案] lc3296. 移山所需的最少秒数(二分答案+周赛416_2+好题)
  • 二进制文件与文本文件的区别【字符集Charset】
  • 安卓13设置动态修改设置显示版本号 版本号增加信息显示 android13增加序列号
  • 23个Python在自然语言处理中的应用实例
  • GEE 高阶应用:基于 BFAST 类型模型的近实时干扰检测
  • CemtOS7安装Nginx
  • 排序题目:对角线遍历 II
  • 【Go】-viper库的使用
  • 科研绘图系列:R语言组合多个图形
  • 寿司检测系统源码分享
  • 数据科学基石:解析属性类型体系——从标称到比率,全面洞察数据分类机制
  • 粒子向上持续瀑布动画效果(直接粘贴到记事本改html即可)