vue2 路由守卫:

vue-router 路由实现:
路由就是用来跟后端服务器进行交互的一种方式,通过不同的路径,来请求不同的资源,请求不同的页面是路由的其中一种功能。
首先知道有3个参数 to , from, next (意义:
to是即将要进入的目标路由对象,
from 是当前导航即将要离开的路由对象,
next调用该方法后,才能进入下一个钩子函数afterEach )

next() // 直接进入to所指的路由
next(false) // 中断当前路由
next(‘route’) // 跳转指定路由
next(‘error’) // 跳转错误路由

1 全局守卫: this.$router.beforeEach((to, from, next) =>{next(); })
执行之前触发beforeEach(to,from,next),执行后触发router.afterEach(to, from);2 路由独享守卫: this.$route.beforeEnter(to, from ,next());3 组件内部的守卫:
路由进入之前 beforeRouteEnter(to, from, next())
路由更新之前 beforeRouteUpdate(to, from, next())
路由离开之前 beforeRouteLeave(to, from, next())

看下示例
vue2 中写入全局的路由守卫,一般就直接在router.index 页面完成。

import Vue from 'vue';
import Router from 'vue-router';Vue.use(Router)const router = new Router({routes: [path: '/', // 默认进入路由redirect: '/home'  //重定向},{path: '/login',name: 'login',component: LoginPage},....]})router.beforeEach((to, from, next) => {console.log('初始化就执行全局路由守卫');// to: Route: 即将要进入的目标 路由对象// from: Route: 当前导航正要离开的路由// next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。const nextRoute = ['home', '....'];        let isLogin = global.isLogin; // 是否登录// 未登录状态;当路由到nextRoute指定页时,跳转至loginif (nextRoute.indexOf(to.name) >= 0) { if (!isLogin) {router.push({ name: 'login' })}}// 已登录状态;当路由到login时,跳转至home if (to.name === 'login') {if (isLogin) {router.push({ name: 'home' });}}next();});// 或者这样写  全局路由守卫// router.beforeEach((to, from, next) => {//  const isLogin = localStorage.ele_login ? true : false;//   if (to.path == '/login') {//    next();//  } else {// 是否在登录状态下//    isLogin ? next() : next('/login');//  }// });export default router;

假设我们执行了跳转登录页面
login.vue页面内部
当点击登录按钮时

 handleLogin() { // 发送请求this.$axios.post("/api/posts/goxxx", {phone: this.phone, // 参数code: this.verifyCode // 参数}).then(res => {// console.log(res);// 检验成功 设置登录状态并且跳转到/localStorage.setItem("ele_login", true);this.$router.push("/"); // 进入首页}).catch(err => {// 返回错误信息this.errors = {code: err.response.data.msg};});},

vue2独享路由守卫

就是某一个路由所单独享用的路由守卫。

官方定义是这样说的:你可以在路由配置上直接定义 beforeEnter 守卫,这些守卫与全局前置守卫的方法参数是一样的。
给个模拟的需求 当path路径名必须是xinxi才可以进行访问
我们在路由页面中

{name: 'xinxi',path: 'news', // 注意路由底层给你加了 '/' ,如果自己加 '/' 有可能还显示不出效果component:News,meta:{isAuth:true,title:'信息'},beforeEnter: (to,from,next)=>{//里面的内容跟全局前置路由守卫一样的代码console.log('beforeEnter',to,from,next)if(to.meta.isAuth){if(localStorage.getItem('school') === 'xinxi'){next()}else{alert('权限不够用')}}else{next()}}
},
注意 :独享路由守卫只有前置你,没有后置。独享的路由守卫可以和全局后置路由守卫配合在一起(可以随意的组合)

组件内部守卫

  //通过路由规则进入该组件时候被调用beforeRouteEnter(to, from, next) {let dataconsole.log(to, from)if (from.name === 'buildingDeoMonitor') {if (sessionStorage.getItem('navData') != null) {data = JSON.parse(sessionStorage.getItem('navData'))next(vm => {vm.navFormInfo.data = data})} else {next()}} else {next()}},假设我们要离开某个页面就要看是否要清除的缓存或者判断
// 路由离开之前beforeRouteLeave(to, from, next) {// 判断要跳转哪个页面 从而清除缓存sessionStorage.removeItem("treelist");sessionStorage.removeItem("orgid");next();},再或者beforeRouteLeave(to, from, next) {// 判断是否提交if (this.action == 1) {// 判断往哪里跳转if (to.path.indexOf("dataitem") != -1) {if (this.issubmit > 1) {sessionStorage.setItem("eauForm", JSON.stringify(this.ruleForm));next();} else {this.ismess = true;this.success = 3;this.message = this.$t("phrase.saveEneFirst");}} else {next();}} else {next();}},

vue2的也就结束了
vue3 和这些几乎是一样的。唯一不同的是就是组件内部的路由守卫
也就是说 onBeforeRouteLeave、onBeforeRouteUpdate是vue-router提供的两个composition api,它们只能被用于setup中。

import { onBeforeRouteLeave, onBeforeRouteUpdate } from 'vue-router';
export default {setup() {onBeforeRouteLeave((to,from)=>{//离开当前的组件,触发alert('我离开啦')})onBeforeRouteUpdate((to,from)=>{//当前组件路由改变后,进行触发console.log(to);})}
}

值得注意的是 路由进入之前 beforeRouteEnter并没有变,也不用写在setup内部。

 export default defineComponent({setup() {let obj=reactive({name:'张三',})return {obj}},beforeRouteEnter(to, from, next) {console.log(to);  //上一个页面前往的的页面(当前页面)console.log(from);//来自哪一个页面next((e:any) => {// 这个回调参数e,包含setup中暴露出去的数据以及内置方法window.console.log(e)// 获取是否来自home1页面if(from.path=='/home1'){e.obj.name='李四'}})},})

你学废了吗,欢迎指正,欢迎指正。

vue2 和 vue3 的 路由守卫相关推荐

  1. Vue的路由配置(Vue2和Vue3的路由配置)

    系列文章目录 Tips:使用Vue3开发项目已经有一段时间了,关于Vue2的路由是如何一步一步搭建的都快要忘记了,今天写着篇文章主要就是回顾一下,在Vue2和Vue3中我们是如何一步一步的配置路由的. ...

  2. vue3种路由守卫详解

    vue路由守卫 1 什么是路由守卫 路由守卫就是路由跳转过程中的一些钩子函数 ,在路由跳转的时候,做一些判断或其它的操作. 类似于组件生命周期钩子函数 . 2 分类 1.全局路由守卫 beforeEa ...

  3. vue-cli 初始化创建 vue2.9.6 项目路由守卫、封装axios、vuex

    阅读目录 Vue如何封装Axios请求 1 安装axios 2 封装代码 axios 应用方式 Vue 中的路由守卫 使用演示 1 全局守卫 2 组件级守卫 3 单个路由独享的守卫 4 官网整个路由守 ...

  4. vue3设置路由守卫基于token进行路由导航和退出

    在某些时候,用户没有登录的情况下我们不允许用户访问以下特定的页面,此时我们需要用到路由守卫来实现. 在router下的index.js中的相应位置设置守卫函数,将守卫函数挂载到router的钩子bef ...

  5. vue3:路由守卫(全局守卫、路由独享守卫、组件内守卫)

    router.js:全局守卫 import {createRouter,createWebHashHistory } from 'vue-router'// 省略了routes 中的路由规则 cons ...

  6. vue2路由手动创建二级路由路由传参路由守卫打包上线

    路由手动配置: #在@vue/cli创建的项目中,路由用法如下. 1.安装路由npm install vue-router@32:定义路由所需的组件(.vue文件)要实现页面about 和home两个 ...

  7. vue2进阶篇:vue-router之“使用独享路由守卫”

    文章目录 10.13路由守卫 案例:将案例改为"使用独享路由守卫" 完整代码 本人其他相关文章链接 10.13路由守卫 注意点1: 前置路由守卫或者后置路由守卫中,to指代切换到哪 ...

  8. vue2和vue3的区别(由浅入深)

    前言 vue2和vu3之前的区别,一直以来是面试必考题目,如何回答,回答的层次决定了面试者的对于vue2,3的理解,以及对于vue3目前稳定版本发展的方向的了解,即考察使用程度,又考察了学习能力,可以 ...

  9. 持续不断更新中... 自己整理的一些前端知识点以及前端面试题,包括vue2,vue3,js,ts,css,微信小程序等

    Vue3自考题 1,如何使用vue3的组合式api 答: 在普通的前端项目工程中,在script标签中增加setup即可使用api 使用setup()钩子函数 2,computed 与各个watch之 ...

最新文章

  1. TensorFlow之变量OP
  2. R语言dplyr包使用bind_rows函数纵向合并两个dataframe(行生长)、使用bind_cols函数横向合并两个dataframe(列生长)
  3. 再见 JDK ...
  4. leetcode 1723. 完成所有工作的最短时间(二分+剪枝+回溯)
  5. 在powerdesigner 中出现Could not Initialize JavaVM! 应该怎么解决
  6. Linux基础操作及命令管理
  7. mysql select count() count(1)_select count()和select count(1)的区别和执行方式讲解
  8. 【转】正则表达式之基本概念
  9. 随笔小杂记(一)——更改整个文件夹内的命名
  10. 万能启动的最后的传说:UD三分区法部署教程!UD加UEFI!
  11. 看看五年MacBook使用经验平常都用那些软件
  12. 全能视频播放器:OmniPlayer for Mac(1.4.6)
  13. PA AE PR AI 2019注册机
  14. 【小程序项目开发 -- 京东商城】uni-app 商品分类页面(下)
  15. 数字电路课程设计汽车尾灯控制器
  16. 我们不生产知识,我们只是知识的搬运工
  17. 美食杰-菜谱大全(二)
  18. /home/ljx/miniconda3/compiler_compat/ld: cannot find crtbeginS.o: 没有那个文件或目录
  19. JAVA实现接入企业微信报警
  20. 关于thread中mutex相关内容的理解

热门文章

  1. TR-069协议介绍
  2. 搭建steam饥荒专用(本地)服务器
  3. python基础学习七:字符串操作
  4. ISO-8859-1处理案例
  5. linux-内存分析工具pmap
  6. Adobe PDF 虚拟打印失败的解决方案
  7. python安装出错运行不了_安装python失败是什么原因?
  8. 计算机专业技术考核表,专业技术人员量化考核计分表(3类).doc
  9. HTML期末作业----个人商城系统
  10. 如何查看linux管道的内容,linux 查看资料和管道命令