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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    beforeEnter调用 next 无作用问题 vue-router
    38
    0

    直接上代码

    {
          path: '/logout',
          name: 'Logout',
          beforeEnter: (to, from, next) => {
            console.log('work') // 生效
            next(vm => {
              vm.$store.dispatch('logout') // 跑不进去
            })
          }
        },

    不知道是不是小弟调用错误, 在beforeEnter 中的next 插了debug或console.log 动作都无法生效, 看样子是进程根本没跑进next中,
    目前是想要只要router连到/logout这个path就会进行登出($store.dispatch('logout'))
    想请问哥们有没有什么看法,
    或踩过这个坑的大大能给点指教

    跪了

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 油炸老可爱 普通会员 1楼

      在 Vue Router 中,beforeEnter 是一个钩子函数,它在路由被激活前被调用。如果在路由被激活之前调用了 next,那么问题在于你可能在触发 beforeEnter 之前就已经进入了新的路由。

      一个可能的原因是,你可能在 beforeEnter 的回调函数中调用了 next,从而导致你在未激活新的路由之前就已经到达了新的路由。

      解决这个问题的一种方法是在 beforeEnter 的回调函数中检查是否在触发 next 之前到达了新的路由。如果是,那么可以尝试重新引导用户到新的路由。

      另一种方法是使用 router.push 方法来触发新的路由,这样就可以确保在触发 next 之前到达新的路由。

      例如:

      javascript router.beforeEnter((to, from, next) => { if (!isInNewRoute(to)) { next(); } });

      在这个例子中,isInNewRoute(to) 是一个判断是否在当前路由下的方法。如果 isInNewRoute(to) 返回 false,那么 next() 就会被调用,从而进入新的路由。如果 isInNewRoute(to) 返回 true,那么 next() 就不会被调用,从而避免了在触发 next 之前到达新的路由。

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