场景:url链接切换,页面不刷新,内容要改变
- 借助hash或者history api实现url改变,触发hashchange事件或者popstate事件,页面不刷新
- 监听hashchange或者popstate事件,处理url参数
- 从routes中匹配组件,进行渲染
#具体实现步骤
⼀个SPA应⽤的路由需要解决的问题是:1、监听路由变化,页⾯跳转内容改变但是不刷新,同时路由还需要以插件形式存在,所以:
-
- ⾸先我会定义⼀个 createRouter 函数,返回路由器实例,实例内部做⼏件事:
- 保存⽤户传⼊的配置项:routes和mode等等
- 监听hash或者popstate事件,触发回调函数
- 回调⾥根据path匹配对应路由:解析url,匹配到routes中的一个
-
- 将router定义成⼀个Vue插件,即实现install⽅法,内部做两件事:
- 实现两个全局组件:router-link和router-view,分别实现页面跳转和内容显示
- 定义两个全局变量:router,vue组件内可以访问当前路由和路由器实例
原码部分:
- 如何创建实例router
- github1s.com/vuejs/route…
- 1、操作routes:currentRoute, addRoute, removeRoute, hasRoute, getRoutes, resolve, options
- 2、操作url: push, replace, go, back: () => go(-1), forward: () => go(1)
- 3、钩子(守卫):beforeEach, beforeResolve, afterEach, onError: errorHandlers.add, isReady,
- 4、install(vue): vue注册 RouterLink、 RouterView
- github1s.com/vuejs/route…
- 事件监听:window.addEventListener
- popstate
- beforeunload
- 页面跳转:RouterLink
- props['to'] string 或者 object
- render:没有自定义props.custom,返回一个a标签
- 内容显示:RouterView
- props.route
- render: 返回匹配到的组件h(component)