Vue 全家桶学习笔记 —— Vue Router 的进阶使用

232 篇文章 0 订阅
219 篇文章 0 订阅

Vue 全家桶学习笔记 —— Vue Router 的进阶使用

 

本篇文章是对 Vue Router 官方文档的总结,已经看过的小伙伴可以忽略,没看过的小伙伴可以看看哟,能省掉你看官方文档的时间。先贴上上一篇文章的地址

Vue 全家桶学习笔记 —— Vue Router 的基础使用

上一篇说完基础使用,本篇就来总结下进阶的使用方式

导航钩子

导航钩子的用处是为了方便我们在路由正在改变时做一些处理的,我们可以拦截下导航,并在做完我们的处理以后,选择继续完成跳转、取消跳转或者跳转到其他页面

对于导航钩子,有三种使用方法:全局局部组件内

全局钩子

// router 为上一篇文章中创建的 VueRouter 实例
router.beforeEach((to, from, next) => {
    console.log('hook 1')
    next() // 调用下一个钩子
})
router.beforeEach((to, from, next) => {
    console.log('hook 2')
    next() // 调用下一个钩子
})
router.beforeEach((to, from, next) => {
    console.log('hook 3')
    next() // 钩子全部执行结束,将要跳转到目标路由
})

beforeEach()方法接收三个参数,第一个to为即将导航到的路由对象,from为马上要离开的路由对象,而next是一个函数,用过 koa 的小伙伴对next一定都很熟悉,只有调用了这个方法,导航钩子才会继续往下执行,如果不调用则将会一直处于等待状态(不会被确认),不会跳转到下一个路由

上面的代码中,创建了三个导航钩子,它们会按照创建的先后顺序一次执行,但前提也是必须要调用next(),直到所有的钩子都执行完

需要说下的是,next()也可以传参

next() // 按顺序执行钩子,所有钩子都执行完后,跳转到目标路由
next(false) // 中断导航,并且将浏览器 url 重置为 from 对应的地址
next('/otherPage') next({path: '/otherPage'}) // 中断当前导航,执行新的导航,将会跳转到另一个地址

局部钩子

这个跟简单,只需要在每一个 route item 的配置对象上直接定义beforeEnter就可以,它的使用方式与全局的beforeEach一致

组件内钩子

const Side = {
    template: '...',
    beforeRouterEnter (to, from, next) {
      // 在进入该组件的对应路由被确认之前调用
      // 因为当前组件还没有创建,所以不能用 this 来获取组件实例
      // 但是可以在 next 中传入一个回调来访问组件实例
      next (vm => {...})
    },
    beforeRouteUpdate (to, from, next) {
      // 渲染了同样的组件,组件被复用时调用
    },
    beforeRouteLeave (to, from, next) {
      // 导航离开时调用
    }
}

路由元信息

我们可以为每个 route item 配置一个 meta 字段,这个字段是一个对象,我们可以将当前路由需要的一些信息作为一个对象赋值给这个字段

{
    ...,
    meta: {
      userRole: 1,
      requireAuth: true
    }
}

上面的元信息meta字段中,配置了两个属性,一个是用户角色userRole,另一个是是否需要身份验证requireAuth

那我们要如何获取这个meta字段呢?

首先需要明确的是,由于每一个 route 对象都能够嵌入子 route ,所以当匹配到一个 route 的时候,也会匹配到它下面的子 route,如果这些子 route 也有 meta 的话,就会有很多个元信息字段。我们可以通过route.matched属性来检测每一个 route 对象

滚动行为

在创建 VueRouter 实例时,出来routers参数,还可以配置一个 scrollBehavior方法

const router = new VueRouter({
    routes: [...],
    scrollBehavior (to, from, savedPosition) {
      ...
      return {
        x: 0,
        y: 0
      }
    }
})

scrollBehavior方法有 to 和 from 两个路有对象,与上文中的相同。而该方法需要返回一个需要滚动到的位置的信息对象,有下面两种形式

{x: 0, y: 0} // x y 为目标位置的坐标,数字类型
{selector: string} // string 为一个锚点,如 to.hash

入股返回一个假值或者空对象,就不会发生滚动

该方法的第三个参数记录了上一个页面的最后位置,但是只有在调用浏览器的前进后退按钮时才会生效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值