vue2.0全域性路由守衛(全域性控制登入)

行走的羊駝駝發表於2018-12-15

例:

router.beforeEach((to, from, next) => {
  let isLogin = Vue.prototype.$loginInfo.info.is_login
  if (to.matched.length === 0) { //沒有匹配到當前路由
    next('/error')
  } else if (!isLogin && to.path !== '/login' && to.path !== '/register' && to.path !== '/password') {
    //如果沒有登入,跳轉到登入頁面
    next('/login')
  } else {
    if ((to.path === '/login' || to.path === '/register' || to.path === '/password' || to.path === '/error') && isLogin) { 
      //如果已經登入,卻嘗試訪問登入頁面或者錯誤頁面,將繼續保持原本的頁面
       next(from.path)  
    } else {
      next()
    }
  }
  // next()
})
複製程式碼

全域性後置鉤子

你也可以註冊全域性後置鉤子,然而和守衛不同的是,這些鉤子不會接受 next 函式也不會改變導航本身:

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

複製程式碼

路由獨享的守衛

你可以在路由配置上直接定義 beforeEnter 守衛:

const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]
})
複製程式碼

相關文章