当前位置: 首页 > ops >正文

VUE2 学习笔记18 路由守卫

路由守卫

有时候,并不是所有的导航区都可以随意点击,需要具备某些权限,才能看到某些导航区对应的展示区。比如,希望用户在未登录的情况下,无法访问个人中心。这种效果可以通过路由守卫实现。

路由守卫在VueRouter的实例对象上,通过beforeEach调用,beforeEach在每一次路由切换之前都调用一次beforeEach内部设置的函数。

假设VueRouter实例为router,在路由配置文件中,通过router.beforeEach配置全局前置路由守卫。全局前置路由守卫在页面初始化、及每次路由切换前被调用。

全局前置路由守卫router.beforeEach

beforeEach内部设置一个函数,这个函数有三个参数:to from next

to:将要跳转去的目标路由的信息

from:目前页面的路由信息

next:放行,调用next后,页面才会跳到to页面。如果不调用next,无法完成跳转,也就是说,页面的跳转会被拦截。

当路由配置过多时,可能需要在beforeEach中写过多判断逻辑,这时可以给路由配置添加标识属性,在beforeEach中,通过对标识进行判断,来分析是否放行。

这个标识配置在meta配置项中,meta的value是一个对象,对象中以key:value的形式存放要保存的数据。在to from $route 等存储路由信息的结构上,meta数据可以通过.meta.key获得。

全局后置路由守卫router.afterEach

afterEach的参数和beforeEach类似,也有to from,且携带的信息和beforeEach一致,但是后置路由守卫中没有next。

afterEach在页面初始、页面被切换之后调用。

在后置路由守卫中,可以写一些路由放行后需要执行的逻辑。

独享守卫beforeEnter

有时候,不需要在所有的路由跳转时都进行守卫逻辑的判断,通过独享路由守卫,可以为某一个路由配置当前路由独享的守卫。

独享守卫配置在routes配置项中,独享前置路由守卫用beforeEnter配置,独享路由守卫没有后置路由守卫。

当页面从其他路由向配置了独享守卫的路由跳转时,会触发beforeEnter,beforeEnter的配置函数和beforeEach是一样的。

组件内路由守卫

路由守卫也可以不在配置文件中写,可以写在组件中的script标签中,配置beforeRouteEnter函数,以及beforeRouteLeave函数。

beforeRouteEnter函数在通过路由规则,进入组件时调用。beforeRouteLeave函数在通过路由规则离开组件时调用。

beforeRouteEnter和beforeRouteLeave与全局守卫不同,触发的时机并不是按跳转前后的逻辑进行的,而是进入之前(beforeRouteEnter),进入之后,组件内并没有路由守卫的逻辑,在离开之前调用beforeRouteLeave。

beforeRouteEnter和beforeRouteLeave的参数为to from next。

而且,这两个函数在通过路由规则进入或离开时才会触发,如果是通过引入组件标签等非路由规则引起的组件变化,无法触发这两个函数。在beforeRouteEnter中可以进行权限校验等。

Vue项目路由模式

hash模式

hash值反应在URL中,通过/#/标识,/#/及后面的部分就是hash值。

在前端和后端交互时,hash值不会随着HTTP请求发送给后端服务器。

在配置路由文件时,如果不进行设置,默认是hash模式。

history模式

在new VueRouter的配置中,通过mode配置路由模式,默认模式是hash,如果想切换到history模式,要把mode设置成history。

history模式下,没有/#/标识,也没有hash值。

history模式和hash模式对比:

从路径美观的角度考虑,history模式下的URL确实比hash模式的URL更优美。但hash模式的兼容性更好,在一些旧浏览器中也可以生效,history的兼容性比起hash略差,但是也只是相对来说。除此之外,路由模式还影响项目上线的配置。上线,指项目写完之后,放在服务器上部署,让用户可以访问。前端项目部署时,需要把前端项目通过webpack等打包方式,打包成HTML、JS、CSS文件部署。在Vue项目中,一般通过npm run build对项目进行打包。

打包好的文件需要在服务器上部署才能查看,在本地无法查看。

node.js搭建一个小服务器让页面能显示:npm init 

npm i express

在server.js文件下,通过const express = require('express')引入express

通过const app = express()创建一个服务实例,通过app.listen(服务器端口,服务器启动回调函数)来对服务器端口和启动进行配置;通过app.get(后端路由,匹配成功回调)来处理前端请求。

这样配置之后,就搭建好了一个很简易的服务器。

通过node server启动服务器。通过:端口/后端路由,可以访问后端服务器获取数据。

当项目部署时,需要把前端的静态资源(打包好之后生成的HTML、CSS、JS)放在后端服务器目录下,一般放在static或者public文件夹下。

在后端服务器中通过app.use(express.static(静态文件路径))配置静态文件。

当访问服务器地址时,就可以显示配置好的静态资源。默认显示静态资源下的index.html。

但是,由于前端路由和后端路由是不一样的,当刷新前端页面时,如果前端使用的是history模式,前端页面发送网络请求,后端服务器会把前端URL当做资源请求地址去匹配,导致页面无法正常显示。但如果前端使用的是hash模式,由于hash模式后面的hash值不会发送给服务器,因此在hash模式下不会由于刷新导致错误。

在使用history模式时,如果想要在项目部署时,后端服务器不会把前端URL当做后端路由,需要在后端服务器通过配置解决。

解决方式多种多样,其中一种,是后端服务器可以通过一个中间件connect-history-api-fallback,来对URL进行判断。

在后端通过npm i 进行下载,引入之后,在配置静态资源之前使用,就可以解决后端服务器无法判断前端路由和后端路由的问题。

UI组件库

有很多针对Vue的成型的组件库,移动端主流的UI组件库有Vant、Cube UI、Mint UI等。网页端主流的UI组件库有element-ui、IView UI等。

UI组件库的使用并没有很多技巧,在使用时,按照官网文档教程进行使用就可以了。

http://www.xdnf.cn/news/17065.html

相关文章:

  • Mysql使用Canal服务同步数据->ElasticSearch
  • 数据挖掘,到底是在挖掘什么?
  • Golang 基本数据类型
  • 智慧工业复杂目标检测精度跃升:陌讯多模态融合算法实战解析
  • mac前端环境安装
  • 机器学习之KNN、贝叶斯与决策树算法
  • 自动驾驶控制算法——MPC控制算法
  • 浮雕软件Artcam安装包百度云网盘下载与安装指南
  • Redis(六):分布式锁
  • 【机器学习深度学习】 知识蒸馏
  • 分布式网关技术 + BGP EVPN,解锁真正的无缝漫游
  • Java面试宝典:深入解析JVM运行时数据区
  • 计算机网络:(十三)传输层(中)用户数据报协议 UDP 与 传输控制协议 TCP 概述
  • python+MySQL组合实现生成销售财务报告
  • AI的第一次亲密接触——你的手机相册如何认出你的猫?
  • QUdpSocket发送组播和接受组播数据
  • Modstart 请求出现 Access to XMLHttpRequest at ‘xx‘
  • FPGA学习笔记——简易的DDS信号发生器
  • Cisco 3750X交换机更新到IOS 15.2后无法启动 提示:Boot process failed...
  • 内部排序算法总结(考研向)
  • VS2019c++环境下OPCUA+Kepserver+open62541实现与三菱plc通信
  • 机器学习Adaboost算法----SAMME算法和SAMME.R算法
  • 【2025年8月5日】将运行一段时间的单机MongoDB平滑迁移至副本集集群
  • LeetCode算法日记 - Day 2: 快乐数、盛水最多容器
  • 计算机常用英语词汇大全
  • 【unitrix】1.1 readme.md
  • Erdős–Rényi (ER) 模型
  • Android10 系统休眠调试相关
  • 文件编译、调试及库制作
  • 视频水印技术中的变换域嵌入方法对比分析