一、分类
- 全局导航守卫
- 路由独享守卫
- 组件内的守卫
二、全局前置守卫
在进入任何路由之前,都会触发全局前置守卫。
在路由配置文件/src/router/index.js中配置全局前置守卫:
一旦在应用中加上全局前置守卫,进入任何路由前都会触发上面的箭头函数。函数中接收三个形参:const router = new VueRouter({ ... })// 全局前置守卫router.beforeEach((to, from, next) => {// 进入任何路由前都会触发该函数})
to:表示即将要进入的路由对象;from:表示当前导航正要离开的路由;next:控制路由执行的函数;1、案例
我们可以在前置守卫中判断进入首页的用户是否登录:router.beforeEach((to, from, next) => {// 判断用户是否进入首页if(to.path.includes('/home')) {// 如果用户进入的是首页,我们可以判断用户是否登录if(/* 如果用户已登录 */) {next();} else {alert("你还未登录,请先登录。");next('/login') // 跳转到登录页面}} else {next(); // 如果不是进入首页,就让用户可以直接进入}})
三、路由独享前置守卫
在路由配置文件中,找到指定的路由,设置路由独享的前置守卫:const routes = [{path: '/home',name: 'Home',component: Home,// 前置路由独享守卫beforeEnter: (to, from, next) => {// ...}}]
四、组件内的后置守卫
在组件中,设置组件的后置守卫:export default {beforeRouteLeave (to, from, next) {// 导航离开该组件的对应路由时调用// 可以访问组件实例 `this`}}
