浅谈Vue导航守卫

本文介绍了Vue导航守卫的概念,将其比喻为vue-router的生命周期钩子,主要用于控制和守卫页面导航。通过实例展示了如何使用导航守卫进行用户权限管理,如未登录用户重定向至登录页面。讨论了全局前置、后置守卫,路由独享及组件内守卫的使用,并提供了相关代码示例。了解更多详情,请查阅官方文档。
摘要由CSDN通过智能技术生成

什么是导航守卫?
导航守卫可以看做vue-router的生命周期钩子函数。
作用:主要是用来通过跳转或取消的方式来守卫导航
例如:用户没有登录就前往主页面,此时利用导航守卫将用户重定向到登录页面

示例:
根据导航的不同生命周期,会触发不同的导航守卫钩子函数
创建vue项目,src目录结构如下:
在这里插入图片描述
在views目录下创建Contact.vue文件
About.vue组件代码

在这里插入代码片// About.vue
<template>
  <div class="about">
    <p>about</p>
  </div>
</template>

Contact.vue

// Contact.vue
<template>
  <div class="contact">
    <p>Contact</p>
  </div>
</template>

Home.vue

// Home.vue
<template>
  <div class="home">
    <p>Home</p>
  </div>
</template>

接下来在src/router.js中进行路由配置

// src/router.js
import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'
import Contact from './views/Contact.vue'
import About from './views/About.vue'

Vue.use(Router)

const router = new Router({
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home
    },
    {
      path: '/about',
      name: 'about',
      component: About
    },
    {
      path: '/contact',
      name: 'contact',
      component: Contact
    }
  ]
})

export default router;

接下来添加全局前置导航守卫:

// src/router.js
import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'
import Contact from './views/Contact.vue'
import About from './views/About.vue'

Vue.use(Router)

const router = new Router({
  routes: [{
      path: '/',
      name: 'home',
      component: Home
    },
    {
      path: '/about',
      name: 'about',
      component: About
    },
    {
      path: '/contact',
      name: 'contact',
      component: Contact
    }
  ]
})

// 全局前置守卫
+ router.beforeEach((to, from, next) => {
+   console.log('进入新导航之前:');
+   console.log('to:', to);
+   console.log('from:', from);
+   next();
+ })

export default router;

该守卫会在进入新的路由前触发,to表示要去到哪里,from表示从哪里来,next是一个方法,要调用该方法来resolve这个钩子,执行效果依赖next方法的调用参数
next方法的参数有以下几个可能:
next():进入管道中的下一个钩子。如果全部钩子执行完了,导航的状态就是confirmed(确认的

next(false):中断当前的导航。如果浏览器的 URL 改变了(可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。

next(’/’) 或者 next({ path: ‘/’ }):跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: true、name: ‘home’ 之类的选项以及任何用在 router-link 的 to prop 或 router.push 中的选项。

next(error):(2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError 方法中注册过的回调。

全局后置守卫,路由独享守卫,组件内的守卫也和上述大同小异
afterEach:全局后置守卫,进入某一个路由之后触发钩子函数。
beforeEnter:路由独享的守卫,只针对某一个路由有效。
beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave:组件内的守卫,针对某一个组件有效。
这些导航守卫的用法,更多内容请参阅官方文档:https://router.vuejs.org/zh/guide/advanced/navigation-guards.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值