Vue-Router

路由的概念相信大部分同学并不陌生,它的作用就是根据不同的路径映射到不同的视图。我们在用 Vue 开发过实际项目的时候都会用到 Vue-Router 这个官方插件来帮我们解决路由的问题。Vue-Router 的能力十分强大,它支持 hashhistoryabstract 3 种路由方式,提供了 <router-link><router-view> 2 种组件,还提供了简单的路由配置和一系列好用的 API。

大部分同学已经掌握了路由的基本使用,但使用的过程中也难免会遇到一些坑,那么这一章我们就来深挖 Vue-Router 的实现细节,一旦我们掌握了它的实现原理,那么就能在开发中对路由的使用更加游刃有余。

同样我们也会通过一些具体的示例来配合讲解,先来看一个最基本使用例子:

  1. <div id="app">
  2. <h1>Hello App!</h1>
  3. <p>
  4. <!-- 使用 router-link 组件来导航. -->
  5. <!-- 通过传入 `to` 属性指定链接. -->
  6. <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
  7. <router-link to="/foo">Go to Foo</router-link>
  8. <router-link to="/bar">Go to Bar</router-link>
  9. </p>
  10. <!-- 路由出口 -->
  11. <!-- 路由匹配到的组件将渲染在这里 -->
  12. <router-view></router-view>
  13. </div>
  1. import Vue from 'vue'
  2. import VueRouter from 'vue-router'
  3. import App from './App'
  4. Vue.use(VueRouter)
  5. // 1. 定义(路由)组件。
  6. // 可以从其他文件 import 进来
  7. const Foo = { template: '<div>foo</div>' }
  8. const Bar = { template: '<div>bar</div>' }
  9. // 2. 定义路由
  10. // 每个路由应该映射一个组件。 其中"component" 可以是
  11. // 通过 Vue.extend() 创建的组件构造器,
  12. // 或者,只是一个组件配置对象。
  13. // 我们晚点再讨论嵌套路由。
  14. const routes = [
  15. { path: '/foo', component: Foo },
  16. { path: '/bar', component: Bar }
  17. ]
  18. // 3. 创建 router 实例,然后传 `routes` 配置
  19. // 你还可以传别的配置参数, 不过先这么简单着吧。
  20. const router = new VueRouter({
  21. routes // (缩写)相当于 routes: routes
  22. })
  23. // 4. 创建和挂载根实例。
  24. // 记得要通过 router 配置参数注入路由,
  25. // 从而让整个应用都有路由功能
  26. const app = new Vue({
  27. el: '#app',
  28. render(h) {
  29. return h(App)
  30. },
  31. router
  32. })

这是一个非常简单的例子,接下来我们先从 Vue.use(VueRouter) 说起。

原文: https://ustbhuangyi.github.io/vue-analysis/vue-router/