vue-13如果让你从零开始写⼀个vue路由,说说你的思路

288 阅读1分钟

场景:url链接切换,页面不刷新,内容要改变

  • 借助hash或者history api实现url改变,触发hashchange事件或者popstate事件,页面不刷新
  • 监听hashchange或者popstate事件,处理url参数
  • 从routes中匹配组件,进行渲染

#具体实现步骤

⼀个SPA应⽤的路由需要解决的问题是:1、监听路由变化,页⾯跳转内容改变但是不刷新,同时路由还需要以插件形式存在,所以:

    1. ⾸先我会定义⼀个 createRouter 函数,返回路由器实例,实例内部做⼏件事:
    • 保存⽤户传⼊的配置项:routes和mode等等
    • 监听hash或者popstate事件,触发回调函数
    • 回调⾥根据path匹配对应路由:解析url,匹配到routes中的一个

    1. 将router定义成⼀个Vue插件,即实现install⽅法,内部做两件事:
    • 实现两个全局组件:router-link和router-view,分别实现页面跳转和内容显示
    • 定义两个全局变量:routeroute和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
  • 事件监听:window.addEventListener
    • popstate
    • beforeunload
  • 页面跳转:RouterLink
    • props['to'] string 或者 object
    • render:没有自定义props.custom,返回一个a标签
  • 内容显示:RouterView
    • props.route
    • render: 返回匹配到的组件h(component)