第八章-路由导航守卫

106 阅读1分钟

全局前置守卫

router.beforeEach

router.beforeEach((to, from, next) => {
    console.log('to ====>', to)
    console.log('from ====>', from)
    next()
})
参数说明
to即将进入的目标路由对象;
from当前导航正要离开的路由对象;
next()在任何给定的导航守卫中都被严格调用一次next() 表示放行的意思,如果不放行那么路由跳转就会被卡住,无法进入到路由对应的组件页面。该函数可在导航守卫不同逻辑中调用多次;
next(false)中断当前的导航,如果调用了next(false)并且传入的参数为false,URL地址栏改变了,那么URL地址会被重置到from路由对象中的地址;
next('/')next({ path: '/' })中断当前的导航,然后进行一个新的导航,跳转到指定的地址;

举例:

  • 判断用户是否登录,没有登陆跳转到登录页让用户进行登录操作,用户有登录放行进入首页。
    router.beforeEach((to, from, next) => {
        // 假设这里表示用户有登录
        if (userStore.token) {
            // 放行
            next()
        } else {
            // 中断导航,跳转到from路由对象中的地址
            next(false)
        }
    })
    

全局后置守卫

全局后置守卫一般可以用来做loadingBar,关闭进度条动画操作。

后置守卫和前置守卫不同的是,后置守卫不接受next函数,也不会改变导航本身。

router.afterEach((to, from) => {
    console.log('to ====>', to)
    console.log('from ====>', from)
})