干货!!!Vue 导航守卫

全局守卫

每次路由跳转都会被触发

router.beforeEach((to, from, next) => {
    //全局前置守卫,当一个导航触发时,全局前置守卫按照创建顺序调用
    //数据校验时,非常有用if(to.fullpath==="/home"){next('/login')}
    console.log("全局---------------------")
    console.log("beforeEach", to, from)
    next()
})

router.beforeResolve((to, from, next) => {
    //全局解析守卫,2.5.0新增,这和router.beforeEach类似,区别是再导航被确认之前,同时在所有组件内守卫和异步路由组件被解析之后,解析守卫就被调用
    console.log("全局---------------------")
    console.log("beforeResolve", to, from)
    next()
})
router.afterEach((to, from) => {
    //全局后置钩子
    console.log("全局---------------------")
    console.log("afterEach")
})

路由独享的守卫

写在路由配置里

export default new Router({
    mode: 'history',
    base: process.env.BASE_URL,
    routes: [{
        path: "/",
        redirect: "/a"
    }, {
        path: "/a/:id",
        //路由独享的守卫
        beforeEnter: (to, from, next) => {
            console.log("路由---------------------")
            console.log('before enter');
            next()
        },
        component: pageA
    }, {
        path: "/b",
        component: pageB
    }]
})

组件内的守卫

在路由组件内直接定义一下路由导航守卫

  beforeRouteEnter (to, from, next) {
        // 在渲染改组件的对应路由被confirm前调用
        //不能获取组件实例this
        //因为当守卫执行前,组件实例还没被创建
        console.log("组件---------------------")
        console.log(this,"beforeRouteEnter");
        next()
    },
    beforeRouteUpdate(to, from, next) {
        //在当前路由改变,但是改组件被复用时调用
        //举例来说,对于一个带有动态参数的路径 /a/:id,在/a/1和/a/2之间跳转的时候,
        //由于会渲染同样的pageA组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用
        //可以访问组件实例 this
        console.log("组件---------------------")
        console.log(this,"beforeRouterUpdate")
        next()
    },
    beforeRouteLeave (to, from, next) {
        //导航离开改组件的对应路由时调用
        //可以访问组件实例 this
        //通常用来禁止用户在还未保存修改前突然离开。该导航可以通过next(false)来取消
        console.log("组件---------------------")
        console.log(this,"beforeRouteLeave")
        next()
    }

总结:
1:导航被触发
2:调用全局的beforeEach守卫
3:在重用的组件里调用beforeRouteUpdate守卫
4:在路由配置里调用beforeEnter
5:在被激活的组件里调用beforeRouteEnter
6:调用全局的beforeResolve守卫
7:导航被确认
8:调用全局的afterEach钩子
9:触发DOM更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值