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 备份容灾服务产品体验教程
作者:尹珉,KubeSphere 社区用户委员会杭州站站长 前言 Kubernetes 集群天生自带自愈功能,但是往往有些意外情况使自愈功能不起作用,比如:公司同事把某个 namespace 删除.存 ...
- nodejs redis 小试牛刀
一.环境安装 书接上文,浅学Redis之后,服务器已经安装Redis了,用 nodejs 链接 redis 之前,先安装 nodejs 环境. 1.安装fnm (1)压缩包fnm-linux.zip搞 ...
- Protues中51单片机按键无法复位(已解决)
前言 昨晚用 Protues 搭建了 51 的最小系统电路,在实物中好用的复位电路,到仿真里不能正常复位了. 51 单片机是高电平复位,所以在运行时 RST 引脚应该是低电平,但在仿真中 RST 引脚 ...
- dotnet core微服务框架Jimu ~ 会员授权微服务
提供授权服务,用户使用会员的用户名和密码获取 token, 带着 token 访问受保护的接口,如浏览和发布新闻. 有 2 个公开的 api: token: 获取 token; GetCurrentM ...
- kubectl常用命令(二)
四.进入容器 # 进入pod容器,但是对权限要求也较多 kubectl exec -it podName sh # 通过bash获得 pod 中某个容器的TTY,相当于登录容器 kubectl exe ...
- .NET云原生应用实践(五):使用Blazor WebAssembly实现前端页面
本章目标 使用Blazor WebAssembly实现管理"贴纸"页面 集成认证与授权机制 如果你对Blazor WebAssembly的使用不感兴趣,可以跳过本章的阅读.你也可以 ...
- 2个月搞定计算机二级C语言——真题(9)解析
1. 前言 本篇我们讲解2个月搞定计算机二级C语言--真题9 2. 程序填空题 2.1 题目要求 2.2 提供的代码 #include <stdio.h> double f1(double ...
- 4.7 Linux压缩文件或目录中文件为.bz2格式(bzip2命令)
bzip2 命令同 gzip 命令类似,只能对文件进行压缩(或解压缩),对于目录只能压缩(或解压缩)该目录及子目录下的所有文件.当执行压缩任务完成后,会生成一个以".bz2"为后缀 ...
- 2. jenkins的安装
Docker方式: 如果在安装社区推荐插件时报错,网络延迟,则建议采用官方yum安装 遇到一个问题:公司局域网openstack虚拟机安装时,修改了镜像仍报错,但是自己电脑vmware虚拟机正常,暂时 ...
- AI千恋万花(java调用api实现)附完整项目及注释)重置版)
感觉博客的第一版质量有点低下了,删了重置一下,希望能给其他人的代码带来一些灵感 前情提要:https://www.cnblogs.com/h4o3/p/18523151 由于是匆忙制作的老婆系统,主界 ...