路由守卫 Router

69 阅读1分钟

路由守卫是vue-router对象的一个重要属性,本质上是一个函数。它的主要功能是通过跳转或取消的方式守卫导航。在路由切换时,路由守卫会被调用,可以用来执行一些权限控制,例如检查用户是否已经登录。

路由守卫的使用可以分为组件内的守卫、全局守卫和路由独享的守卫三种方式。具体来说:

  1. 组件内的守卫: 这种守卫应用于路由级别,并不是任意组件,而是特定路由组件。

    [
        {
            path:'/home',
            component: Home,
            beforeEnter:(to,from,next)=>{...}
        }
    ]
    
  2. 全局守卫:全局守卫分为全局前置守卫和全局后置守卫。当一个导航触发时,全局前置守卫按照创建顺序调用。它们是异步解析执行的,此时导航在所有守卫resolve完之前一直处于等待中。一般来说,全局前置守卫的执行时间是初始化时执行,每次路由切换前都会执行。可以类比为一座房子的大门,整个小区就这一个大门,你想要进入其中任何一个房子,都需要经过这个大门的检查。
    beforeEach、 afterEach 、beforeResolve

    const router = new VueRouter({
      mode: 'history',
      base: process.env.BASE_URL,
      routes
    })
    router.beforEach((to,from,next)=>{
        ...
        //to是将要进去的路由,from是正要离开的路由
        //next()用来resolve这个钩子,next(false)不让它跳转,next('/home'),next({path:'/home'})
    })
    
  3. 路由独享的守卫: 这种方式与全局守卫类似,但是只针对特定的路由进行守卫。 beforenter

      {
      data(){return {}},
      beforeRouteEnter(to,from,next){
     
      next()
      }
      }