前端是万能的

Vue 路由钩子

2019-03-19  本文已影响2人  肆意木

路由钩子主要作用是拦截导航,让他完成跳转或者取消跳转。比如登录界面输入了账号、密码,主界面需要展示账号,但是你没有把 “账号” 这个字段保存到 vuex 或者 session 里面,直接跳转会导致主界面显示空白,这个时候你就需要一个 beforeRouteLeave 路由钩子,还没有数据的情况下,禁止界面跳转,举例子(伪代码):

beforeRouteLeave(to,from,next){
  if('account' === ' '){
      next(false);
  }else{
    next();
  };
};

大概就是这么个意思,参数 to ——是要跳转到的界面,from —— 从哪个界面离开,next() —— 是否允许跳转,如果是 next(false) ——禁止跳转,next({name:LOGIN}) —— 跳转到登录界面(需要自己手动配置路由),next() 或者 next(true) ——允许跳转。

路由钩子的主要实现方式有三种

1. 全局实现

1.1 使用 router.beforeEach 注册一个全局的 before 钩子:

var routes = [{
  path:'/route1',
  name:'route1',
  component:() = > import('./index.vue')  //调用的时候再开始加载
}]
 const router = new VueRouter({ 
    routes;
  })
router.beforeEach((to, from, next) => {
  next(false);
})

1.2 全局的 after 钩子,(after 钩子没有 next 方法,不能改变导航)

2. 路由独享

2.1 配置路由的时候可以直接增加 beforeEnter,功能类似 before。

var routes = [{
  path:'/route1',
  name:'route1',
  component:() = > import('./index.vue')  //调用的时候再开始加载
  beforeEnter: (to, from, next) => {
       next();
  }

}]

3. 组件内实现的钩子

3.1 beforeRouteEnter
在导航确认之前调用,新组件的 beforeCreate 之前调用,所以特别注意它的 this 是 undefined

3.2 beforeRouteUpdate

用法:点击更新二级导航时调用。

3.3 beforeRouteLeave
离开当前界面之前调用,用法:1. 需要的保存或者删除的数据没有完成当前操作等等原因,禁止界面跳转。

上一篇 下一篇

猜你喜欢

热点阅读