1. 安装过程
- 通过
mixin
全局注入beforeCreate
钩子,组件初始化时注入_routerRoot
- 使用
Object.defineproperty
挂载$router
和$route
参数 - 全局注入
RouterView
和RoterLink
组件 - 定义合并策略
2. 实例化Router
- 解析配置生成
matcher
- 判断环境实例化
history
对象
3. 路由跳转
- 根组件实例化时触发
beforeCreate
钩子,调用Router
的init
方法,绑定全局路由监听事件,进行首次路由跳转并响应式处理this._route
- 触发路由跳转后,执行
Router.history
上的跳转方法 - 解析路由,提取钩子,执行钩子,确认并更新路由触发响应式,修改
url
,触发after
钩子 - 下一事件循环响应式触发视图更新,渲染新路由组件
4. 路由渲染
RouterView
内部定义了render
函数,每次重新渲染时执行,会根据当前的route
解析出对应的组件,用对应的组件代替自身去渲染。如无组件则渲染成注释节点
路由传参的props方式则是在匹配出组件之后并解析出参数,最终以组件data的方式参与组件的vnode创建实现props传参
RouterLink
内部定义了render
函数,每次重新渲染时执行,根据传参定义事件,最终渲染成a
标签并绑定对应事件