账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Vue-router导航守卫怎么实现错误回调?
    26
    0

    因为项目里用了懒加载,每次重新build之后有修改过的文件哈希码会改变,导致路由跳转到有修改过的页面会报页面文件404。所以想要在导航守卫执行next()的时候,如果发生错误就回调回来,重新刷新一次页面,让哈希码更新到最新就能够解决问题。

    查了Vue-router的文档,发现有next(error)和router.onError(callback)两个守卫方法。
    但是我直接在代码中加入这段代码,并没有效果。

    请问这个Vue-router的错误回调的守卫方法是怎么使用的?

    //我的写法
    router.beforeEach((to, from, next) => {
      next(error);
    })
    
    router.onError((callback)=>{
        console.log(callback)
    });
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 不许吃香菜 普通会员 1楼

      在 Vue Router 中,可以通过全局或单个路由的导航守卫(navigation guards)来实现错误回调。这里以全局前置守卫为例,展示如何实现错误处理:

      ```javascript import Vue from 'vue' import Router from 'vue-router'

      Vue.use(Router)

      const router = new Router({ routes: [...] })

      // 全局前置守卫 router.beforeEach((to, from, next) => { try { // 在这里执行可能会抛出错误的操作,例如检查用户权限、验证 token 等 if (!checkUserAuth()) { throw new Error('未登录或登录已过期') }

      // 如果一切正常,调用 next() 进行路由跳转
      next()
      

      } catch (error) { // 错误处理逻辑,如跳转到错误页面或显示错误提示 console.error(error) next('/error') // 跳转到错误页面 } })

      function checkUserAuth() { // 模拟检查用户是否已登录的方法 // 实际项目中请根据实际情况编写 return Math.random() > 0.5; // 随机返回 true 或 false } ```

      在上述代码中,我们在全局前置守卫中尝试进行可能产生错误的操作,并使用 try...catch 将其包裹起来,以便捕获并处理可能出现的错误。当发生错误时,我们将其记录到控制台,并将用户重定向到一个错误页面。

      同样的,你也可以在路由独享的 beforeEnter 守卫或者组件内的 beforeEach、beforeRouteEnter 守卫中实现类似的功能。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部