Vue导航守卫

    科技2022-07-11  113

    导航守卫主要用来通过跳转或取消的方式守卫导航,有全局守卫、组件内守卫和路由独享守卫。

    - 全局守卫 1.前置守卫 当一个导航触发时,先调用前置守卫,再进行路由跳转。注册前置守卫:

    router.beforeEach((to, from, next) => { // ... })

    其中to和from都是路由,to代表即将要进入的路由,from代表正要离开的路由,next是一个函数,next在任何守卫中都需要严格调用一次,执行效果依赖next方法的调用参数: i next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是confirmed。

    ii next(false): 中断当前的导航。如果浏览器的URL改变了 ,那么URL地址会重置到from路由对应的地址。

    iii next(’/’)或next({ path: ‘/’ }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。

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

    2.后置守卫 在路由跳转之后才调用后置守卫。注册后置守卫:

    router.afterEach((to, from) => { // ... })

    to与from与前置守卫一样。

    - 组件内守卫 在组件内定义的守卫,有以下三种:

    //声明组件 let myA={ template:` <div>A组件</div> `, //设置组件内路由 beforeRouteEnter (to, from, next) { // 在渲染该组件的对应路由被确认前调用 // 不能通过this获取组件实例,此时this指向兜底对象 }, beforeRouteUpdate (to, from, next) { // 在当前路由改变,但是该组件被复用时调用,比如当前组件为zujian,那么从/zujain/1跳转至/zujian/2时会调用 // 可以通过this获取组件实例 }, beforeRouteLeave (to, from, next) { // 导航离开该组件的对应路由时调用 // 可以通过this获取组件实例 } };

    to,from,next与全局前置守卫的一样。

    - 路由独享守卫 在路由配置上定义守卫:

    let routes=[{ path:"/a/:id", component:myA },{ path:"/b", component:myB, //设置路由独享守卫 beforeEnter(to,from,next){ //... } }]; //创建路由器对象 let router=new VueRouter({ routes:routes });

    在该路由被确认前调用,参数与全局前置守卫一样。

    Processed: 0.026, SQL: 8