2022-11-15 vue笔记-路由vue-router(四) 路由守卫(又称路由拦截,导航守卫)的定义以及示例

本文详细介绍了Vue中的路由概念,重点讲解了路由守卫的定义、分类、使用场景及语法。路由守卫允许在路由跳转前、中、后进行操作,如权限判断。在示例中,展示了如何通过路由守卫实现用户在未登录状态下点击个人中心页面时,自动重定向到登录页面;已登录用户则可以直接进入个人中心。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.路由的概念

路由其实是一种映射关系。

  • 生活中的路由:设备和ip的映射关系;
  • node.js路由:接口和服务的映射关系;
  • (前端)Vue中的路由:路径和组件的映射关系。
1.路由守卫的定义
定义

路由守卫又称导航守卫,指是路由跳转前、跳转中、跳转后过程中的一些钩子函数

官方解释

vue-router提供的导航守卫,要通过跳转或取消的方式来守卫导航

路由守卫的分类

全局路由、组件内路由,路由独享

钩子函数
1.全局路由的钩子函数有:beforeEach、beforeResolve、afterEach(参数中没有next)
2.组件内路由的钩子函数有:beforeRouterEnter、beforeRouteUpdate、beforeRouteLeave
3.路由独享的钩子函数有:beforeEnter
2.路由守卫的使用场景

给路由添加一个权限判断:路由跳转之前,会触发一个函数
场景:用户在登录的状态下就能去到某页面,但是未登录则给你弹出一个未登录的提示。

3.语法:router.beforeEach((to,from,next) => {}
let isLogin = false; //未登录
router.beforeEach((to,from,next) => {
	//路由跳转“之前”先执行这里,决定是否跳转
	if (to.path === '/Login' && isLogin === false) {
		alert("请登录”)
		next(false) //阻止路由跳转
	}else {
		next() //正常放行
	}
});

参数

  • to:要跳转到的路由目标
  • from:从哪里跳转的路由 (路由对象信息)来源
  • next:函数体 必须要next()才会让路由正常地跳转和切换

全局路由在真正跳转之前,会执行一次beforeEach函数,
next调用则跳转,也可以强制修改要跳转的路由。

4.路由守卫示例:(接前例)为点击Center路由的操作判断是否已登录
router.index.js
import vueRouter from "vue-router"
// 引入路由
...
import Login from "@/views/Login"

// 配置路由
// 创建路由对象router
const router = new vueRouter({
    routes: [
    ...
        {
            path: "/Login",
            component: Login
        }

    ],
});
//此处一般用token验证
const checkUser = {
    isLogin() {
        return false;
    }
};
//登陆守卫
router.beforeEach((to, from, next) => {
    console.log(to.path);//输出用户的点击路径
    if (to.path == "/Center") {//点击Center:登录状态检查
        console.log("正在检查登录状态...");;
        if (checkUser.isLogin()) { //是否已登录
            console.log("您已登陆!");
            next(); //登录:放行
        } else {
            console.log("您未登陆!正在跳转到登录页面...");
            next("/Login"); //未登录:跳转至Login页
        }
    } else {//点击别的页面:直接放行
        next();
    }
});
// 导出路由
export default router;
views/Login.vue
<template>
  <div>
    用户名:<input type="text">
    密码:<input type="password">
  </div>
</template>
结果

用户点击一次:个人中心
在这里插入图片描述
因没有登录而自动转到Login页面,
若已登录

const checkUser = {
    isLogin() {
        //return false;
        return true;
    }
};

则放行进入Center.页面
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端OnTheRun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值