vue路由守卫详解

vue路由守卫详解Vue 路由守卫详解

Vue路由守卫

1 什么是路由守卫

路由守卫就是路由跳转过程中的一些钩子函数 ,在路由跳转的时候,做一些判断或其它的操作。 类似于组件生命周期钩子函数 。

2 分类

2-1 全局路由守卫

2-2 路由独享守卫

beforeEnter(to,from,next) 路由对象单个路由配置 ,单个路由进入前触发

2-3 组件路由守卫

2-4 参数

3 详解

3-1 路由前置守卫 beforeEach(to, from, next)

const router = new VueRouter({ 
    ... }) router.beforeEach((to, from, next) => { 
    // ... }) 

在路由跳转前触发,在实际项目中应用最多,主要是登陆验证和跳转权限判断

3-2 全局解析守卫 beforeResolve(to, from, next)

router.beforeResolve((to, from, next) => { 
    // ... }) 

类似于路由前置守卫 beforeEach(to, from, next),也是路由跳转前触发,但它是同时在所有组件内守卫和异步路由组件被解析之后触发的

调用时机:在 beforeEach(to, from, next)和组件内beforeRouteEnter(to, from, next)之后,afterEach(to, from)之前调用

3-3 全局后置守卫 afterEach(to, from, next)

router.afterEach((to, from) => { 
    // ... }) 

于路由前置守卫 beforeEach(to, from, next)相对,路由跳转后触发,但它是同时在所有组件内守卫和异步路由组件被解析之后触发的

调用时机:在 beforeEach(to, from, next)和组件内beforeResolve (to, from, next)之后, beforeRouteEnter(to, from)之前调用

3-4 路由独享守卫 beforeEnter(to, from, next)

const router = new VueRouter({ 
    routes: [ { 
    path: '/foo', component: Foo, beforeEnter: (to, from, next) => { 
    // ... } } ] }) 

于路由前置守卫 beforeEach(to, from, next)相同,但在beforeEach(to, from, next)后触发

3-5 组件路由守卫 beforeRouteEnter(to, from, next)

const Foo = { 
    template: `...`, beforeRouteEnter(to, from, next) { 
    // 不能获取组件实例 // 因为当守卫执行前,组件实例还没被创建 } } 

因为该守卫在组件创建之前阶段触发,那个时候组件还没有创建成功,所以这个守卫内不能使用this获取组件实例

调用时机:在全局守卫beforeEach(to, from, next)和独享守卫beforeEnter(to, from, next)之后,全局beforeResolve(to, from, next)和全局afterEach(to, from)之前调用

3-6 组件路由守卫 beforeRouteUpdate(to, from, next)

beforeRouteUpdate(to, from, next) { 
    // 在当前路由改变,但是该组件被复用时调用 // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候, // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。 // 可以访问组件实例 }, 

调用时机:在当前路由复用时

3-7 组件路由守卫 beforeRouteLeave(to, from, next)

 beforeRouteLeave(to, from, next) { 
    // 导航离开该组件的对应路由时调用 // 可以访问组件实例 } 

4 完整的导航解析流程

参考链接

5 实际应用

router.beforeEach((to, from, next) => { NProgress.start(); // NProgress实现显示加载进度条效果 console.log("routemgr to", to.path); if ("这里判断是不是开发环境") { //开发环境下,直接路由 next(); } else { if (to.path == "/login") { //登录页面 session.set("isOpen", "ok"); next(); } else if ("这里判断如不是生产环境下录页面需要判断权限") { //非生产环境下 next(); } else { //非登录页面需要判断权限 console.log("routemgr user", lu.userinfo); if (gadget.isEmptyObject(lu.userinfo)) { 
    //首次打开页面的时候,不需要弹出错误页面提示,直接跳转至登录页面即可 let ret = session.get("isOpen"); if (ret == "ok") { 
    //vuex用户信息判断,如果不存在,则重新登录 MessageBox.alert("用户未登录,需要重新登录.", "错误", { 
    confirmButtonText: "确定", type: "error", }).then(() => { 
    console.log("重新登录"); //next(`/procmgr/login?redirect=${ 
    to.path}`); next(`/login`); NProgress.done(); }); } else { 
    next(`/login`); NProgress.done(); } } else { 
    //权限判断 } } } }); 

原文链接:https://blog.csdn.net/_/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231127.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 安卓浏览器横评_flash浏览器

    安卓浏览器横评_flash浏览器近日国外媒体AndroidAuthority就对全球使下载最大的11款手机浏览器进行了性能方面的横向评测,相信在看完后,你能够从中找到更适合自己的手机浏览器。(注:本测试主要针对浏览器性能,并不能说明浏览器的整体效果)一、测试设备、工具及浏览器介绍1、测试设备Nexus4,运行Android4.4.2系统。2、测试浏览器本次测试的浏览器总共11款,分别是:-百度浏览器3.1.0.2(国际…

    2025年8月12日
    3
  • aircrack和reaver破解路由器PIN码

    aircrack和reaver破解路由器PIN码使用aircrack,寻找附近开启wps的路由器,邪恶……嘻嘻airmon-ng start wlan0airodump-ng mon0CH 11 ][ Elapsed: 36 s ][ 2012-12-18 04:46                                          BSSID              PWR  Beacons    #Data

    2022年5月5日
    108
  • win+r常用指令怎么打开_R语言指令

    win+r常用指令怎么打开_R语言指令最近在学习Linux,被命令行深深吸引了,陷入其中不能自拔,考虑到Windows上也有cmd命令行,但对新人来说不是很友好。这次我们就先讲一下Win+R运行框里的快捷键,绝对能提高不少效率!什么是Win+R防止有些小白看不懂,所以说明一些,使用Windows+R快捷键就可以打开如下图的运行窗口,在里面输入命令可以方便快捷地打开很多东西,而且本文的所有操作都是在这个运行框里输入的,不要与cm…

    2022年10月12日
    5
  • Python + Neo4j(安装)可视化分析漫威十年人物关系图谱[通俗易懂]

    Python + Neo4j(安装)可视化分析漫威十年人物关系图谱[通俗易懂]目录1数据爬取1.1漫威人物关系图谱网站1.2爬取人物关系数据2Neo4j的安装及服务启动2.1Neo4j下载安装2.2开启Neo4j服务3数据准备3.1加入列名3.2放入本地Neo4j的import文件4数据可视化4.1加载”names_message.csv”文件4.2加载”relation_message.csv”文件…

    2022年6月26日
    58
  • 手写一个简化版Tomcat[通俗易懂]

    手写一个简化版Tomcat

    2022年4月2日
    37
  • Linux的vi命令用法大全_vim命令和vi的区别

    Linux的vi命令用法大全_vim命令和vi的区别linux下使用vi编辑是很方便的,但是具体要怎么做呢?下面由学习啦小编为大家整理了linux下vi的相关命令,希望对大家有帮助!1.linuxvi命令的基本观点基本上vi能够分为三种形态,区分是命令方式(commandmode)、插入方式(Insertmode)和底行方式(lastlinemode),各方式的功用区分如下:1)命令行方式commandmode)控制屏幕光标的移动,字…

    2022年9月22日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号