前言
在前端,无论是vue还是react项目,在项目中的路由选择目前一般只有两种:hash和history 因为本人目前主要也是vue技术栈,所以以下例子都是基于vue场景
vue适用于构建单页面应用(SPA),而单页面应用是基于路由和组件的,路由访问不同路径,路径映射不同组件。(SSR打开新页面)
单页面应用只有一个完整页面,它在第一次加载页面时就将唯一完整的html页面和所有其余页面组件一起下载下来,切换页面时不会加载整个页面,而是只更新某个指定容器的内容。(更新视图不重新请求页面)
路由器底层实现三大步骤
- 监听地址栏变化
- 查找当前路径对应的页面组件
- 将找到的页面组件替换到router-view
Hash和History
vue-router提供两种方式来实现前端路由:Hash模式和History模式(默认Hash)
Hash模式:
- url带#,#符号以及后面的字符就是hash,可以通过window.location.hash属性读取
- url变化后根据hash的改变来更新页面和数据,每次改变hash都会在浏览器访问历史中增加一个记录,使用浏览器后退按钮可以返回
- hash不会被包括在http请求中,它是用来指导浏览器动作的,对服务端完全无用,所以改变hash不会重新加载页面
History模式:
- 利用HTML5 History Interface中新增的pushState()和replaceState()方法
- 在以上两个方法已有的back、forward、go基础上,提供了对历史记录进行修改的功能,不过执行修改虽然改变url,但不会立刻向后端发送请求
- 路由跳转不会重新加载页面
- 不带#看起来比较优雅
- 兼容性没hsh好