vue

vue中的路由的那些事

2018-06-05  本文已影响513人  该帐号已被查封_才怪

一、导航守卫

1、全局守卫
router.beforeEach


image.png

router.beforeEach 很常用,比如验证用户的token等;

这里需要注意的是,一定要确保调用next方法,否则钩子不会被resolved

2、全局解析守卫
router.beforeresolve
在 2.5.0+ ,新增的全局解析守卫,和router.beforeEach 类似,区别是 同时在所有组件内守卫和异步路由被解析之后,解析守卫就被调用

3、全局后置钩子

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

这里的钩子不会接受next函数 也不会改变导航本身

4、路由独享的守卫
我们可以在路由的配置文件index.js 上定义beforeEnter 守卫

image.png

这个比较常用,比如在用户进入组件前 验证他的权限、或者获取各个组件都需要用到的数据等

5、组件内的守卫
beforeRouteEnter、beforeRouteUpdate (2.2 新增--因为参数或者查询导致路由的改变不会触发 进入或者离开的导航守卫,所以新增了这个,当然也可以使用watch $route 对象来应对变化) 、 beforeRouteLeave

顾名思义,这三个是在组件中使用,其中beforeRouteLeave 比较实用,比如用户填写信息未完成要离开的时候 我们可以给他警告;

  export default {
    beforeRouteLeave(to, from, next) {
      if (confirm('你确定离开?')) {
        next(true)
      } else {
        next(false) // next 里的false表示 中断当前的导航 如果url改变了 就会重置到from路由对应的地址
      }
    },
}

二、路由懒加载技术

//官方写法
const app = () => import('@/components/app')
const router = new VueRouter({
  routes: [
    { path: '/app', component: app }
  ]
})
//  简写 
const router = new VueRouter({
  routes: [
    { path: '/app', component:  () => import('@/components/app')}
  ]
})

三、history模式注意事项

具体可见 vue项目二级路由刷新后样式丢失、错乱的解决方案及手机端实时访问npm run dev后的项目

四、vue 实现浏览器回退记忆位置的方法

一定要使用history 模式才能实现
https://router.vuejs.org/zh/guide/advanced/scroll-behavior.html


 const router = new VueRouter({
   mode: 'history',
 scrollBehavior (to, from, savedPosition) {
     if (savedPosition) { //如果savedPosition存在,滚动条会自动跳到记录的值的地方
       return savedPosition
     } else {
       return { x: 0, y: 0 }//savedPosition也是一个记录x轴和y轴位置的对象
      }
     },
   routes: [...]
 })
上一篇 下一篇

猜你喜欢

热点阅读