vue-router的导航守卫使用最新讲解

 更新时间:2022年12月16日 16:36:03   作者:亦世凡华、  
这篇文章主要介绍了vue-router的导航守卫使用讲解,vue-router提供了许多编程式导航的API,其中最常见的导航API有很多种,本文给大家详细讲解,需要的朋友可以参考下

前言

在浏览器中点击链接实现导航的方式,叫做声明式导航。例如:普通网页中点击<a>链接、vue项目中点击<router-link>都属于声明式导航。

在浏览器中调用API方法实现的导航方式,叫做编程式导航。例如:普通网页中调用loaction.href跳转到新页面的方式,属于编程式导航。

vue-router中编程式导航API

编程式路由导航作用就是不借助<router-link>实现路由跳转,让路由跳转更加灵活。

vue-router提供了许多编程式导航的API,其中最常见的导航API有以下几种:

1)this.$router.push('hash地址')

跳转到指定的 hash 地址,并增加一条历史记录

2)this.$router.replace('hash地址')

跳转到指定的 hash 地址,并替换掉当前的历史记录

3)this.$router.go(数值n)

调用this.$router.go()方法,可以在浏览历史中前进和后退

在实际开发中,一般只会前进和后退一层页面。因此 vue-router 提供了如下两个便捷方法:

1)$router.back() 在历史记录中,后退到上一个页面。

2)$router.forward() 在历史记录中,前进到下一个页面。

这两个方法一般可以放在行内样式里面使用,更便捷一点,注意:行内样式里面就不必再写this了

导航守卫

导航守卫也叫路由守卫,可以控制路由的访问权限,示意图如下:

全局守卫

全局前置守卫:每次发生路由的导航跳转时,都会触发全局前置守卫。因此,在全局前置守卫中,程序员可以对每个路由进行访问权限的控制,那么如何创建全局前置守卫呢?如下:

全局前置守卫的回调函数中接收3个形参,如上图所示,其作用为:

to:是将要访问的路由的信息对象

from:是将要离开的路由的信息对象

next:是一个函数,调用 next() 表示放行,允许这次路由导航

next函数的3种调用方式:如下图所示

控制后台主页的访问权限

router.beforeEach(function (to, from, next) {
  if (to.path === '/main') {
    // 要访问后台主页,需要判断是否有token
    const token = localStorage.getItem('token')
    if (token) { // token值存在
      next()
    } else {
      // 没有登录,强制跳转到登录页
      next('/login')
    }
  } else {
    next() // 访问的不是后台主页,直接放行
  }
})

当然我们也可以通过全局前置守卫来进行权限的查看,案例如下:

// 全局前置守卫:初始化时、每次路由切换前执行
router.beforeEach((to, from, next) => {
  console.log('beforeEach', to, from)
  if (to.meta.isAuth) { // 判断当前路由是否需要进行权限控制
    if (localStorage.getItem('token') === 'key') { // 权限控制的具体规则
      next() // 放行
    } else {
      alert('暂无权限查看')
    }
  } else {
    next() // 放行
  }
})

全局后置守卫: 全局后置守卫相对于前置守卫使用的次数相对较少,后置守卫一般使用在项目的title实时发送变化时来使用。

// 全局后置守卫,初始化时执行、每次路由切换后执行
router.afterEach((to, from) => {
  console.log('afterEach', to, from)
  if (to.meta.title) {
    document.title = to.meta.title // 修改网页的title
  } else {
    document.title = 'process'
  }
})

独享路由守卫

顾名思义独享路由守卫就是某一个路由独享的,和其他路由没关系。如下:

beforeEnter (to, from, next) {
  console.log('beforeEach', to, from)
  if (to.meta.isAuth) { // 判断当前路由是否需要进行权限控制
    if (localStorage.getItem('admin') === 'admin123') { // 权限控制的具体规则
      next() // 放行
    } else {
      alert('暂无权限查看')
    }
  } else {
    next() // 放行
  }
}

组件路由守卫

顾名思义是在组件内部使用的守卫。如下:使用方式和上文一样,这里不在赘述。

// 通过路由规则,进入该组件时被调用
beforeRouteEnter (to, from, next) { },
// 通过路由规则,离开该组件时被调用
beforeRouteLeave (to, from, next) { }

当然,作者讲解的也不是太全面,如果你想更细致的了解vue-router的导航守卫,推荐看一下官方文档对导航守卫的说明:导航守卫官方说明

到此这篇关于vue-router的导航守卫使用讲解的文章就介绍到这了,更多相关vue-router的导航守卫内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中传参params和data的区别

    vue中传参params和data的区别

    本文主要介绍了vue中传参params和data的区别,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Vue3 使用v-model实现父子组件通信的方法(常用在组件封装规范中)

    Vue3 使用v-model实现父子组件通信的方法(常用在组件封装规范中)

    这篇文章主要介绍了Vue3 使用v-model实现父子组件通信(常用在组件封装规范中)的方法,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • 详解vite2.0配置学习(typescript版本)

    详解vite2.0配置学习(typescript版本)

    这篇文章主要介绍了详解vite2.0配置学习(typescript版本),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 了解VUE的render函数的使用

    了解VUE的render函数的使用

    本篇文章主要介绍了了解VUE的render函数的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 优化Vue页面中的表单布局和样式的技巧

    优化Vue页面中的表单布局和样式的技巧

    在日常开发中,Vue 项目中的表单布局和样式优化是一个重要的环节,通过合理的布局与美观的样式设计,不仅可以提升用户体验,还能增加页面的实用性和观赏性,本文将总结几个常见的表单和表格布局优化的技巧,需要的朋友可以参考下
    2024-10-10
  • 如何使用Vue做个简单的比较两个数字大小页面

    如何使用Vue做个简单的比较两个数字大小页面

    这篇文章主要给大家介绍了关于如何使用Vue做个简单的比较两个数字大小页面的相关资料,实现一个比较两个数字大小的页面,练习Vue实例的创建、数据绑定和事件监听方法,需要的朋友可以参考下
    2023-10-10
  • VUE项目调用高德地图的详细步骤

    VUE项目调用高德地图的详细步骤

    要在Web页面中加入地图,我推荐你使用高德地图JSAPI,下面这篇文章主要给大家介绍了关于VUE项目调用高德地图的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • vue+iview实现手机号分段输入框

    vue+iview实现手机号分段输入框

    这篇文章主要为大家详细介绍了vue+iview实现手机号分段输入框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • element UI 2.15.13与vue2.0表格勾选回显关键demo

    element UI 2.15.13与vue2.0表格勾选回显关键demo

    这篇文章主要为大家介绍了element UI 2.15.13与vue2.0表格勾选回显关键demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Vue项目通过vue-i18n实现国际化方案(推荐)

    Vue项目通过vue-i18n实现国际化方案(推荐)

    这篇文章主要介绍了Vue项目通过vue-i18n实现国际化方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12

最新评论