VueRouter 构造函数中的 this.matcher
1 | export default class VueRouter { |
构造函数中的 this.matcher = createMatcher(options.routes || [], this)
会根据用户传入的路由信息构造出路由匹配,VueRouter 的路由对象就是由它内部生成的。
createMatcher
1 | export function createMatcher ( |
createMatcher() 返回两个方法。match 用来返回匹配到的路由信息。addRoutes 用于动态添加路由。
createMatcher() 第一次被调用的时候就会调用 createRouteMap,用来初始化初始路由,返回 pathList, pathMap, nameMap。
当动态添加路由时仍调用 createRouteMap 方法,并以之前调用该方法的返回值为参数传入。1
2
3
4
5
6
7
8// 创建 route map,然后返回 pathList, pathMap, nameMap 供下次 addRoutes 使用
const { pathList, pathMap, nameMap } = createRouteMap(routes)
// 添加路由
function addRoutes (routes) {
// 传入之前调用 createRouteMap 的返回值
createRouteMap(routes, pathList, pathMap, nameMap)
}
createRouteMap
1 | // 创建 route map |
createRouteMap 中遍历所有传入的 routes 数据,调用 addRouteRecord 添加路由记录。
1 | // 添加路由记录 |
addRouteRecord 方法内首先会构造一个路由记录 record,如果存在子路由则递归调用 addRouteRecord。最后做对应处理后分别放入 addRouteRecord 的入参 pathMap 与 nameMap 中,由于引用传递就直接修改了外部的 pathMap 与 nameMap。