Vue-Router的两种导航模式

387 阅读1分钟

前言

vue-router包含2种路由模式,一个是使用web模式,一个是memory模式。今天重点分析这两个模式的区别和内部实现原理。

web模式

包装成createWebHistory方法对外使用,内部实现了对H5 History Api的包装。内部主要分为两部分useHistoryStateNavigation和useHistoryListeners。

  • useHistoryStateNavigation:负责历史记录修改变化和导航相关;
  • useHistoryListeners:负责对popstate、beforeunload的监听的相关方法的回调;

History Api介绍

  • history.pushState(state, title, url): 在历史记录中增加一条最新的条目;
  • history.replaceState(state, title, url): 替换当前历史记录的一条内容,这两个api只修改历史记录,不会引起页面的刷新;

useHistoryStateNavigation中的源代码部分:

memory模式

模块内实现一个新的历史导航队列,使用数组实现。当增加一个新的历史记录时,使用push保存到队列中;当替换一条队列记录的时候,使用splice删除最后一条记录,同时push一条新的历史记录。这个时候导航的变化不会引起浏览器历史记录以及路由的变化。针对这种情况,适合使用到不需要记录浏览器变化的场景中。