代码之家  ›  专栏  ›  技术社区  ›  Eduardo

Vue路由器下一次回调总是在每次之前调用

  •  1
  • Eduardo  · 技术社区  · 7 年前

    我正在为一些url创建一个守卫。我在用 beforeEach

    router.beforeEach((to, from, next) => {
      var isLoggedIn = localStorage.getItem('cacheTokenId');
    
      if(to.meta.guestOnly && isLoggedIn) {
        next({ name: 'cars' })
      } else if(to.meta.authOnly && !isLoggedIn) {
        console.log("authOnly")
        next({ name: 'login' })
      }
    
      next()
    })
    

    我的问题是最后一个 next (外部条件)总是被执行。我想 next() 在调用时停止执行。

    现在,我的解决方案已经走到了最后 下一步() 在一个 else

    if(to.meta.guestOnly && isLoggedIn) {
        console.log("guestOnly")
        next({ name: 'cars' })
      } else if(to.meta.authOnly && !isLoggedIn) {
        console.log("authOnly")
        next({ name: 'login' })
      } else {
        next()
      }
    

    为什么这是必要的,我错过了什么吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Emile Bergeron Dhaval Rajpara    7 年前

    我想 next() 在调用时停止执行。

    下一步() 只是一个函数调用,它不会执行语言规范之外的操作。它不会抛出异常,因此不会停止流。

    [a return statement after next() ]

    这是因为你找到的每个例子都避免了调用 下一步() else 就像你在用一样。

    推荐文章