路由守卫

2020-11-02  本文已影响0人  lucky_yao

路由守卫

当导航发生改变的时候,v-router会在不同的地方调用指定的函数,也就是与路由有关的生命周期函数,也称为:路由守卫

组件内守卫

定义在组件内的与路由有关的生命周期函数(守卫)

beforeRouteEnter

当路由解析完成,并在指定的组件渲染之前(组件beforeCreated之前),不能通过这里的this访问组件实例,需要通过next回调来进行调用

不!能!获取组件实例this
因为当前守卫执行前组件实例还没完全被创建

beforeRouteEnter(to,from,next){
    next(vm=>){
      //  vm...
    }
}

beforeRouteUpdate

在当前路由改变,但是该组件被复用时调用

beforeRouteUpdate(to,from,next){
    可以访问组件实例`this`
}

beforeRouteLeave

导航离开该组件的对应路由时调用

beforeRouteLeave(to,from,next){
    可以访问组件实例`this`
}

路由守卫参数

to

即将要进入的目标 路由对象($route)

from

当前导航正要离开的路由对象($route)

next

路由确认回调函数,类似Promise中的resolve函数,一定要确保调用next函数,但是后续的导航行为将依赖next方法调用参数

可以在路由配置上直接定义 beforeEnter 守卫,相对来说,应用不多

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

全局守卫

全局守卫是注册在 <u>router</u> 对象(new VueRouter({...}))上的

beforeEach

当一个导航触发时,全局前置守卫按照创建顺序调用

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

beforeResolve

在所有组件内守卫和异步路由组件被解析之后被调用

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

afterEach

导航被确认后调用

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

因为导航已经被确认,所以没有 next

上一篇下一篇

猜你喜欢

热点阅读