vue-router路由守卫进阶

vue-router路由守卫进阶

路由守卫,可以想象为古代御前侍卫,路由守卫,则是对路由进行权限控制

分类:全局守卫、独享守卫、组件内守卫

  1. 全局前置-路由守卫

    作用:主要用来鉴权

    用户点击导航区,随后引起路径的改变,前端路由器监测到,进行规则的匹配,在合适的位置呈现组件。

    在这里插入图片描述

    调用时机:初始化时被调用,每次路由切换之前调用

    写法:

    router.beforeEach((to, from, next) => {
    	// 判断当前路由是否需要进行权限控制  
    	if(to.meta.isAuth) {    
    		// 权限控制规则    
    		if(localStorage.getItem("token")){      
    			next() // 放行    
    		}  
    	} else if(to.path == '/home'){    
    		next()  
    	} else {    
    		console.log("暂无权限");  
    	}
    });
    

    参数说明:

    导航钩子的三个参数解析:

    • to:即将要进入的目标路由对象
    • from:当前导航即将要离开的路由对象
    • next:调用该方法后,才能进入下一个钩子
  2. 全局后置守卫

    在一个单页面spa应用中,如果改变网页的标题呢?

    • 网页标题是通过来显示的,但spa只有一个固定的HTML,切换不同的页面时,标题并不会改变
    • 但我们可以通过js来修改的内容,window.document.title=‘新的标题’
    • 在vue项目中,如何修改更合适?

    普通的修改方式:

    • 比较容易想到的修改标题的位置是每一个路由对应的组件.vue文件中。
    • 通过mounted声明周期函数,执行对应的代码进行修改即可。
    • 但当页面比较多时,这种方式不容易维护(因为需要在多个页面执行类似的代码)

    有没有更好的方式呢,使用路由后置守卫即可

    路由后置守卫使用说明:

    主要作用:变更页签标题

    调用时机:初始化被调用,每次路由切换之后调用

    写法:

    router.afterEach((to, from) => {
      document.title = to.meta.title
    })
    

    可以利用afterEach来完成标题的修改。具体实现步骤如下:

    1. 可以在钩子当中定义一些标题,利用meta来定义
    // 定义路由
    const routes = [
      {
        path:'/index',
        component:Home,
        meta:{
          title:"首页"
        }
      },
      {
        path:"/about",
        component:About,
        meta:{
          title:"关于"
        }
      }
    ]
    // 利用导航守卫。修改我们的标题
    router.afterEach((to, from) => {
      document.title = to.meta.title
    })
    
  3. 独享守卫

    对某一个路由单独进行控制的守卫

    比如只对系统配置进行限制

    const routes = [
      {
        path: "/system",
        name: "System",
        component: () => import(/* webpackChunkName: "system" */ "@/views/System"),
        beforeEnter: (to, from, next) => {
          if(to.meta.isAuth) {
            if(localStorage.getItem("token")){
              next()
            }
          } else {
            console.log("暂无权限");
          }
        }
      },
    ]
    
  4. 组件内路由守卫

    在组件文件内部写,beforeRouteEnter、beforeRouteLeave

    调用时机:通过路由规则,beforeRouteEnter进入该组件时被调用,beforeRouteLeave离开该组件时被调用

    // 进入守卫,通过路由规则,进入该组件时被调用
    beforeRouteEnter(to, from,next){
    
    },
    // 进入守卫,通过路由规则,离开该组件时被调用
    beforeRouteLeave(to,from,next){
    
    }
    
  5. keep-alive遇见vue-router

    keep-alive是Vue内置的一个组件,可以使被包含的组件保留状态或避免重新渲染

    • include:字符串或正则表达,只有匹配的组件会被缓存
    • exclude:字符串或正则表达式,匹配的组件都不会被缓存

    router-view也是一个组件,如果直接被包在keep-alive里面,所有路径匹配的视图组件都会被缓存

    <keep-alive>
      <router-view>
        // 所有路径匹配到的视图组件会被缓存
      </router-view>
    </keep-alive>
    
  6. 路由器的两种工作模式,history模式与hash模式

    对于一个Url来说,什么是hash值?#及其后面的内容就是hash值。

    hash值不会包含在HTTP请求中,即:hash值不会带给服务器。

    hash也就是锚点(#),本质上是改变window.loaction的href属性。

    我们可以通过直接复制window.location.hash来改变href,页面不发生刷新

    hash模式:

    • 地址永远带着#号,不美观
    • 如果以后将地址通过第三方手机app分享,app校验严格,则地址会被标记为不合法
    • 兼容性好。

    history模式:

    这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面。

    当你使用 history 模式时,URL 就像正常的 url,例如 http://yoursite.com/user/id,也好看!

    不过这种模式要玩好,还需要后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问 http://oursite.com/user/id 就会返回 404,这就不好看了。

    • 地址干净,美观
    • 兼容性和hash模式相比略差,IE9不兼容(可使用强制刷新处理)
    • 应用部署上线时,需要后端人员支持,解决刷新页面服务端404问题。

    url的hash、h5的history,默认情况下,路径的改变使用的是URL的hash模式,如果希望使用HTML5的history模式,非常简单,进行如下配置即可:

    const router = new VueRouter({
      routes,
      mode:'history'
    })
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/124956.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flink ON Yarn 模式 --- per job mode 与application mode的区别

1、per job mode&#xff1a; 对于yarn-per-job模式调度的过程&#xff1a; 1、资源调度&#xff1a; 1、因为是yarn模式&#xff0c;所以客户端会向ResourceManager申请资源&#xff0c;申请容器负责来启动ApplicationManager 2、此时ResourceManager接受到客户端的请求&#…

文件上传 [GXYCTF2019]BabyUpload1

打开题目 传个是jpg文件后缀的一句话木马上去 代码如下 <script languagephp>eval($_POST[v]);</script> 发现上传成功 因此我们需要先上传 .htaccess 文件&#xff0c;然后再上传 2.jpg文件 .htaccess作用&#xff1a;文件将别的后缀名文件内容解析为php程序…

CSS特效001:鼠标放div上,实现旋转、放大、移动等效果

GPT能够很好的应用到我们的代码开发中&#xff0c;能够提高开发速度。你可以利用其代码&#xff0c;做出一定的更改&#xff0c;然后实现效能。 css实战中&#xff0c;经常会看到这样的场景&#xff0c;鼠标放到一个图片或者一个div块状时候&#xff0c;会出现旋转、放大、移动…

Linux 本地Yearning SQL审核平台远程访问

文章目录 前言1. Linux 部署Yearning2. 本地访问Yearning3. Linux 安装cpolar4. 配置Yearning公网访问地址5. 公网远程访问Yearning管理界面6. 固定Yearning公网地址 前言 Yearning 简单, 高效的MYSQL 审计平台 一款MYSQL SQL语句/查询审计工具&#xff0c;为DBA与开发人员使用…

如何设值固定ip地址

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 如何设值固定ip地址 一、找到网络和Internet选项二、选择更改适配器选项2.双击&#xff0c;选择属性3.选择ipv4&#xff0c;点击属性4.选择使用下面的IP地 总结 一、找到网络…

阿里云99元服务器40G ESSD Entry云盘、2核2G3M带宽配置

阿里云99元服务器新老用户均可以买&#xff0c;你没看错&#xff0c;老用户可以买&#xff0c;活动页面 aliyunfuwuqi.com/go/aliyun 配置为云服务器ECS经济型e实例、2核2G、3M固定带宽、40G ESSD Entry云盘&#xff0c;并且续费不涨价&#xff0c;原价99元即可续费&#xff0c…

基于轻量级卷积神经网络CNN开发构建打架斗殴识别分析系统

在很多公共场合中&#xff0c;因为一些不可控因素导致最终爆发打架斗殴或者大规则冲突事件的案例层出不穷&#xff0c;基于视频监控等技术手段智能自动化地识别出已有或者潜在的危险行为对于维护公共场合的安全稳定有着重要的意义。本文的核心目的就是想要基于CNN模型来尝试开发…

05-MySQL-进阶-存储引擎索引SQL优化

一、存储引擎 涉及资料 链接&#xff1a;https://pan.baidu.com/s/1M1oXN_pH3RGADx90ZFbfLQ?pwdCoke 提取码&#xff1a;Coke ①&#xff1a;MySQL体系结构 1.连接层 最上层是一些客户端和链接服务&#xff0c;包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 T…

Linux - 实现一个简单的 shell

前言 之前我们对进程的替换&#xff0c;进程地址空间等等的概念进行了说明&#xff0c;本篇博客会基于这些知识点来 实现一个简单的 shell &#xff0c;如有疑问&#xff0c;可以参考下述博客&#xff1a;Linux - 进程程序替换 - C/C 如何实现与各个语言之间的相互调用 - 替换…

STM32两轮平衡小车原理详解(开源)

一、引言 关于STM32两轮平衡车的设计&#xff0c;我想在读者阅读本文之前应该已经有所了解&#xff0c;所以本文的重点是代码的分享和分析。至于具体的原理&#xff0c;我觉得读者不必阅读长篇大论的文章&#xff0c;只需按照本文分享的代码自己亲手制作一辆平衡车&#xff0c…

【STM32】STM32的Cube和HAL生态

1.单片机软件开发的时代变化 1.单片机的演进过程 (1)第1代&#xff1a;4004、8008、Zilog那个年代&#xff08;大约1980年代之前&#xff09; (2)第2代&#xff1a;51、PIC8/16、AVR那个年代&#xff08;大约2005年前&#xff09; (3)第3代&#xff1a;51、PIC32、Cortex-M0、…

QT事件循环和事件队列的理解

Qt的事件循环机制_qt事件循环流程-CSDN博客 QT-事件循环机制_qt线程事件循环-CSDN博客 一、事件处理流程如图所示&#xff1a; 1.QCoreApplication::postEvent(QObject *receiver,QEvent *event)&#xff1a; QCoreApplication::postEvent()函数用于将事件异步地发送到目标对…

机器学习 vs. 数值天气预报,AI 如何改变现有的天气预报模式

数值天气预报是天气预报的主流方法。它通过数值积分&#xff0c;对地球系统的状态进行逐网格的求解&#xff0c;是一个演绎推理的过程。 然而&#xff0c;随着天气预报分辨率不断升高&#xff0c;预报时间逐渐延长&#xff0c;NWP 模式所需要的算力迅速增加&#xff0c;限制了…

CSS 外边距、填充、分组嵌套、尺寸

一、CSS 外边距&#xff1a; CSS margin&#xff08;外边距&#xff09;属性定义元素周期的空间。margin清除周围的&#xff08;外边框&#xff09;元素区域。margin没有背景颜色&#xff0c;是完全透明的。margin可以单独改变元素的上、下、左、右边距&#xff0c;也可以一次改…

什么叫做阻塞队列的有界和无界

&#xff08;mic老师面试题摘选&#xff09; 昨天一个 3 年 Java 经验的小伙伴私信我&#xff0c;他说现在面试怎么这么难啊&#xff01; 我只是面试一个业务开发&#xff0c;他们竟然问我&#xff1a; 什么叫阻塞队列的有界和无界。现在面试 也太卷了吧! 如果你也遇到过类似…

nanodet训练自己的数据集、NCNN部署到Android

nanodet训练自己的数据集、NCNN部署到Android 一、介绍二、训练自己的数据集1. 运行环境2. 数据集3. 配置文件4. 训练5. 训练可视化6. 测试 三、部署到android1. 使用官方权重文件部署1.1 下载权重文件1.2 使用Android Studio部署apk 2. 部署自己的模型【暂时存在问题】2.1 生成…

如何查看Android 包依赖关系

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、查看依赖关系3.1 方式一3.2 方式二…

安防监控系统视频融合平台EasyCVR页面地图功能细节详解

安防监控视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&#xff…

混沌系统在图像加密中的应用(小波混沌神经网络)

混沌系统在图像加密中的应用&#xff08;小波混沌神经网络&#xff09; 前言一、小波混沌神经网络模型二、拓展三、python代码 前言 小波混沌神经网络是一种神经网络模型&#xff0c;结合了小波变换和混沌理论&#xff0c;用于信号处理、分类和预测。该模型基于多层前向神经网…

selenium元素定位与操作

说明&#xff1a;本篇博客基于selenium 4.1.0 在selenium中&#xff0c;想要对元素进行操作&#xff0c;一般需要如下步骤&#xff1a; 在浏览器中查看元素属性&#xff0c;便于selenium在页面中找到该元素在代码中创建元素对象元素操作、获取元素信息 查看元素属性 浏览器…