vue3 路由-导航守卫
假设用户登录,在地址栏输入了Login,人性化的设计应该自动回到home页面。或者用户输入不存在路由,也应该回到home页面。
这个时候需要用到vue-router的导航守卫功能。
在我们封装的router.js文件下添加router.beforeEach……
const router = createRouter({ ... })
router.beforeEach((to, from,next) => {
// ...
// 返回 false 以取消导航
return false
})
有三个参数,to,from,next。分别代表的意思是
to:要前往的路由
from:当前所在的路由
next:设置接下来要跳转的路由。如果没参数就执行当前的匹配路由,如果有参数相当于要重新跳转的路由
简单来说。就是我要从from跳转到to。所以from一般不怎么需要管,谁在乎你当前页面是啥呢。主要还是判断你要跳转的页面你是否有权限进去。
to,from的参数是一样的,需要关注的参数有 name,path,matched。name和path就是你创建的路由规则里面设置的,我没有设置name,所以我的代码会通过path来判断。matched是判断你要跳转的路由是否可以匹配你的路由规则。再简单点说,我有两个路由配置如下
const routes = [
{ path: '/', component: Home },
{ path: '/Login', component: Login }
]
如果我在地址栏输入http://XXX.com/Login 那么to.matched.length>0。matched是个数组类型。如果可以匹配到你的路由配置那就有值。
如果我在地址栏输入http://XXX.com/nb 可见我的路由配置没有nb这个地址,那么我们就要在导航守卫里判断,让他进入到我们的Home页面。
同理,判断登录状态也是如此,如果我要前往一个页面,但是我的登录状态是false,那就不能跳转过去,就要将其改为Login登录页。
需要用到的是next('/Login')。
下面是我的导航守卫配置
//导航守卫
router.beforeEach((to, from, next) => {
const isLogin = localStorage.getItem('isLogin') ?? false;
if (isLogin) {
// 用户已登录
if (to.path.toLowerCase() === '/login') {
// 如果已登录且要前往登录页,重定向到主页
next('/');
} else {
if (to.matched.length !== 0) {
next();
} else {
next('/');
}
}
} else {
// 用户未登录,重定向到登录页
if (to.path.toLowerCase() !== '/login') {
next('/Login');
}
// 已在登录页,正常导航
next();
}
})
需要注意几点。就是用户如果输入LoGiN。在代码中,是属于!=Login的,所以我在代码中,将其都转为小写了。toLowerCase()。
最新的vue-router中,跳转路由的写法变了。包括vue3也是好多写法都改变了
假设以前我登录成功,跳转路由的写法是:this.$router.push('/Home')。
现在写法稍微不同。需要在你的vue页面导入useRouter。然后push。
直接上代码演示
import { useRouter } from 'vue-router'
//首先在setup中定义
const router = useRouter()
//跳转
router.push(`/Home`)
和原来的写法似乎也差不多,但是新手,比如我,hhh,总归是会踩坑的,所以记录下
vue3 路由-导航守卫的更多相关文章
- vue之路由导航守卫-全局前置守卫
一.使用方式 全局前置守卫用于在路由配置生效之前进行一些动作,可以使用 router.beforeEach 注册一个全局前置守卫: const router = new VueRouter({ ... ...
- 【VUE】5.路由导航守卫
1. 功能需求 1. 当用户登陆成功后,把得到的token存到Session Storage 2. components -> Form.vue , 对预验证进行校验,如果验证不正确就跳出,如果 ...
- Vue 路由导航守卫
Vue 路由导航守卫 一:全局守卫 (1) router.beforeEach beforeEach((to, from, next) => {}) 接收三个参数,在路由切换成功之前调用 to ...
- vue2路由导航守卫(钩子函数)
https://router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%85%A8%E5%B1%80%E5%89%8D%E7%BD% ...
- Vue的钩子函数[路由导航守卫、keep-alive、生命周期钩子]
前言 说到Vue的钩子函数,可能很多人只停留在一些很简单常用的钩子(created,mounted),而且对于里面的区别,什么时候该用什么钩子,并没有仔细的去研究过,且Vue的生命周期在面试中也算是比 ...
- vue - 解决页面跳转到外部链接后,ios回退到本页面,生命周期,路由导航守卫钩子都无法触发的问题
虽然加班,最近心情还是可以的,没多少bug找上门. 乐级生悲,遇到了个奇葩的坑,花了点时间百度才解决...但我离不开的'板砖'是安卓的,对此坑是抗拒的,完全没问题... #此坑描述 ...订单详情某按 ...
- vue路由导航守卫及前置后置钩子函数参数详解
首先构建一个测试demo如下图: 接着来探讨路由配置界面 import Vue from 'vue' import Router from 'vue-router' // import HelloWo ...
- 纯小白入手 vue3.0 CLI - 3.3 - 路由的导航守卫
vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 尽量把纷繁的知识,肢解重组成为可以堆砌的知识. ...
- VueJs(12)---vue-router(导航守卫,路由元信息)
vue-router(导航守卫,路由元信息) 之前泄露两篇有关vue-router博客: VueJs(10)---vue-router(进阶1) VueJs(11)---vue-router(进阶2) ...
- Vue的路由动态重定向和导航守卫
一.重定向 重定向也是通过 routes 配置来完成,下面例子是从 /a 重定向到 /b: const router = new VueRouter({ routes: [ { path: '/a', ...
随机推荐
- 云原生周刊:Kubernetes Grafana 看板更新 | 2024.5.13
开源项目推荐 Chart Testing Chart Testing 是用于测试 Helm 图表的工具.它旨在用于对拉取请求进行 lint 和测试.它会自动检测针对目标分支更改的图表. Cluster ...
- CF1737D Ela and the Wiring Wizard
CF1737D Ela and the Wiring Wizard 题意简述 形象化的,对于一个边,我们可以做以下变换: 将一条边变为自环 将边的一个端点沿着其他边移动 总的来说,就是边的两个端点可以 ...
- 当多核变单核:破解CPU核心神秘失踪的终极指南!
CPU 核心与线程识别问题解决文档 1. 背景 在一台物理主机上运行 lscpu 命令时,发现系统仅识别到 1 个核心和 1 个线程,尽管主机搭载的是 Intel Xeon E5-2686 v4 处理 ...
- Linux利用crontab命令定时任务
系统配置文件/etc 系统周期性所要执行的工作,比如写缓存数据到硬盘.日志清理等.在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件. /etc/crontab文件大概包括下面几 ...
- 微信小程序、uniapp、vue生命周期钩子函数
生命周期是指从创建到销毁的过程 一.微信小程序 小程序里面有两种生命周期函数,第一个:通过App()来注册一个小程序 ,第二个:通过Page()来注册一个页面 应用生命周期函数 app( ) ap ...
- Oracle-表分析和索引分析解读
概述当表没有做分析的时候,Oracle 会使用动态采样来收集统计信息. 获取准确的段对象(表,表分区,索引等)的分析数据,是CBO存在的基石,CBO的机制就是收集尽可能多的对象信息和系统信息,通过对这 ...
- 记录一个vscode无法ssh树莓派,但是mobaxterm可以ssh登录的问题
一.为什么会遇到这个问题 帮别人开发一个树莓派小车的时候,买了一个新的树莓派3B,回来安装好桌面系统之后开启了ssh功能,便想开始使用vscode来ssh开发,省的后续一直要插着屏幕开发,很麻烦.但是 ...
- C++学习——类当中static关键字的作用
一.类和对象 我们知道类是"行为"和"属性"的集合,我们可以通过类来实例化对象,从而定义对象的"行为"和"属性".比如: ...
- Air780E软件指南:C语言内存数组(zbuff)
一.ZBUFF(C内存数组)简介 zbuff库可以用c风格直接操作(下标从0开始),例如buff[0]=buff[3] 可以在sram上或者psram上申请空间,也可以自动申请(如存在psram则在p ...
- Linux中的用户管理-创建删除修改
用户管理 一.用户分类 用户分为三类: 1.管理员 root root UID:0 #拥有最高权限 默认系统中就一个 UID即user ID 类似于身份号码,唯一的,不可重复 2.虚拟用户 作用:在运 ...