vue-router的这些易混知识点你真的会了吗

更多详细内容可查阅 VueRouter官方文档

1.在组件内可通过 this.$router 访问整个 路由器,也可以通过 this.$route 访问 当前路由

// Home.vue
export default {
  computed: {
    username() {
      // this.$route 访问当前路由
      return this.$route.params.username
    }
  },
  methods: {
    goBack() {
      // this.$router 访问整个路由器对象
      window.history.length > 1 ? this.$router.go(-1) : this.$router.push('/')
    }
  }
}

2.动态路由中 可以设置多段 “路径参数”,对应的值都会设置到 $route.params

模式匹配路径$route.params
/user/:username/user/evan{ username: evan }
/user/:username/post/:post_id/user/evan/post/123{ username: 'evan', post_id: '123' }

3.编程式导航中 提供了 pathparams 会被忽略

const userId = '123'
router.push({ name: 'user', params: { userId }}) // -> /user/123
router.push({ path: `/user/${userId}` }) // -> /user/123
// 这里的 params 不生效
router.push({ path: '/user', params: { userId }}) // -> /user

4.路由参数变化时,例如从 /user/foo 导航到 /user/bar原来的组件实例会被复用,此时如果想对参数的变化做出响应的话,可以简单地 watch(监测变化)$route 对象:

const User = {
  template: '...',
  watch: {
    $route(to, from) {
      // 对路由变化作出响应...
    }
  }
}

6.组件的导航守卫中 beforeRouteEnter 守卫 不能 访问 this,因为 守卫在导航确认前被调用,因此即将登场的新组件还没有被创建。
可以通过传一个回调给 next 来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数。

beforeRouteEnter (to, from, next) {
  next(vm => {
    // 通过 `vm` 访问组件实例
  })
}

7.完整的导航解析流程

  1. 导航被触发。
  2. 在失活的组件里调用 beforeRouteLeave 守卫。
  3. 调用全局的 beforeEach 守卫。
  4. 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+)。
  5. 在路由配置里调用 beforeEnter
  6. 解析异步路由组件。
  7. 在被激活的组件里调用 beforeRouteEnter
  8. 调用全局的 beforeResolve 守卫 (2.5+)。
  9. 导航被确认。
  10. 调用全局的 afterEach 钩子。
  11. 触发 DOM 更新。
  12. 调用 beforeRouteEnter 守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。
  • 17
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 31
    评论
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端卡卡西呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值