一、hash
1. 原理:监听onhashchange事件
2. 当url发生变化时,浏览器会记录下来,因此前进后退按钮都可以使用。需要注意的是hash模式下修改的是#后面的内容,使用url的hash来模拟一个完整的url,所以当url改变时,页面不会重新被加载
3. 特点: 能用来构建SPA(单页面引用),改变视图的同事不会向后端发送请求
4. 缺点:url比较丑,如果传复杂的数据,会有体积的限制
5. 能兼容到IE8
二、history
1. 原理:监听onpopstate事件,pushState添加一条新的历史记录,replaceState则会替换当前的历史记录
2. 使用history模式,需要后台的配置支持,因为应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问http://oursite.com/user/id 就会返回404
3. 缺点: history模式中可以实现前进、后退以及跳转,但是刷新的时候是去请求服务器的,如果服务器中没有相应的响应或者资源,就会出现404
4. 只能兼容到IE10
PS:
vue-router
默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。
如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用 history.pushState
API 来完成 URL 跳转而无须重新加载页面。