对于以Vue.js 为主要技术栈的前端工作者来说,熟练的使用Vue-router也是必须的。要想熟练的使用某个工具,必须了解其内部实现的原理。这里对vue-router的实现流程做一个梳理。
vue-router 的安装
vue-route本质上是一个基于 vue.js 的工具,在vue.js中使用一些自定义的工具一般通过Vue.use将工具挂载
1 | import Vue from 'vue' |
当执行这段代码后,会执行vue-router/src/install.js下的install函数
1 | export function install (Vue) { |
install的逻辑很简单,大体流程如下。
- 判断是否注册过
vue-router组件,若注册过,则退出。否则开始注册 - 利用
Vue.mixin在每一个vue实例中挂载beforeCreate hooks - 在
vue实例上挂载$router/$route属性 - 注册
router-view/router-link组件
vue-router实例的创建
vue-router的使用通过new Vue(options)的方式实现初始化,代码位于vue-router/src/index.js
1 | export default class VueRouter { |
创建matcher-map
初始化vue-router实例时首先会根据option创建对应的matcher-map,代码实现在
1 | this.matcher = createMatcher(options.routes || [], this) |
createMatcher的大致流程如下
1 | export function createMatcher ( |
createMatcher首先将执行createRouteMap(routes)函数,将对option生成对应的pathList,pathMap与nameMap,然后暴露matcher 与 addRoutes两个函数。
1 | function match ( |
matcher传入当前路径row与相对路径currentRoute获得一个新的路径,然后在pathList/nameList中返回对应的router
1 | function addRoutes (routes) { |
addRoutes的逻辑也很简单,往pathList,pathMap,nameMap添加新的路由信息,同时vue-router暴露了一个api:addRoutes就是调用了这个方法。