3. createRouter()
该方法接收一个 RouterOptions 参数,返回一个 Router 实例。
简化后的代码如下:
// 文件 router.ts
export function createRouter(options: RouterOptions): Router {
...
const router: Router = {
currentRoute,
listening: true,
addRoute,
removeRoute,
hasRoute,
getRoutes,
resolve,
options,
push,
replace,
go,
back: () => go(-1),
forward: () => go(1),
beforeEach: beforeGuards.add,
beforeResolve: beforeResolveGuards.add,
afterEach: afterGuards.add,
onError: errorHandlers.add,
isReady,
install(app: App) {
...
},
}
return router
}1. 输入 RouterOptions
1.1 接口定义
RouterOptions 的接口定义如下:
1.2 history 选项
RouterHistory 接口的定义如下:
创建 RouterHistory 对象有三种方法:
createWebHashHistory():创建一个 hash history,适用于不用 host 或没 server 配合的,但对 SEO 不友好createWebHistory():创建一个 HTML5 history,需要后端配置下 servercreateMemoryHistory():创建一个基于内存的 history,主要用来处理 SSR,不运行在浏览器端
除了对 base 处理的逻辑不同之外,hash 模式和 HTML5 模式的其它逻辑是一样的,因为 Vue Router 4(即 Vue3)对应的浏览器都支持 HTML5 Web History API。
对于 createWebHistory() 的介绍,详见 createWebHistory()。
1.3 routes 选项
在 createRouter() 方法中,只有一个地方用到了 options.routes。
对于 createRouterMatcher() 方法的介绍,详见 createRouterMatcher()。
2. 输出 Router 实例
2.1 接口定义
Router 实例的接口定义如下:

2.2 install()
install()3. 内部方法
这部分介绍几个重要的内部方法。
监听 popstate 事件进行前端视图的切换
pushWithRedirect()重定向导航navigate()普通导航
3.1 pushWithRedirect()
pushWithRedirect()简化后的代码,如下:
3.2 navigate()
navigate()源码如下:(没有看到明显的组件切换 ???)
相关 types 定义如下:
Last updated