目录
一. 什么是前端路由
前端路由实现起来其实很简单,本质就是监听 URL 的变化,然后匹配路由规则,显示相应的页面,并且无须刷新页面。
二. 有几种模式
Hash
模式History
模式
三. Hash
模式
3.1 相关API
location.href
:返回完整的URL
location.hash
:返回URL
的锚部分location.pathname
:返回URL
路径名hashchange
事件:当location.hash
发生改变时,将触发这个事件
3.2 改变URL的方式有几种
- 通过浏览器前进后退改变 URL
- 通过标签改变 URL
- 通过
window.location
改变URL
3.3 特点
hash
变化会触发网页跳转,既浏览器的前进和后退hash
变化不会刷新页面,SPA
必需的特点hash
永远不会提交到server端
(前端自生自灭)hash
模式url
带#
号
四. History
模式
4.1 相关API
history.go(n)
:路由跳转,比如n为 2 是往前移动2个页面,n为 -2 是向后移动2个页面,n为0是刷新页面history.back()
:路由后退,相当于 history.go(-1)history.forward()
:路由前进,相当于 history.go(1)history.pushState(state, title, url)
:添加一条路由历史记录,如果设置跨域网址则报错history.replaceState(state, title, url)
:替换当前页在路由历史记录的信息popstate
事件:当活动的历史记录发生变化,就会触发 popstate 事件,在点击浏览器的前进后退按钮或者调用上面前三个方法的时候也会触发
4.2 路由经过的流程
- 浏览器发出请求
- 服务器解析请求,解析请求的URL
- 服务器根据配置的路由信息,返回相应的信息
- 浏览器根据服务器返回的信息决定如何解析数据
4.3 特点
- 用
URL
规范的路由,跳转时不刷新页面 history
模式不带#号
五. 两种模式的区别
Hash
模式只可以更改#
后面的内容History
模式可以通过API
设置任意的同源URL
。Hash
模式只能更改哈希值,也就是字符串。History
模式可以通过API
添加任意类型的数据到历史记录中Hash
模式无需后端配置,并且兼容性好History
模式在用户手动输入地址或者刷新页面的时候会发起URL
请求,后端需要配置index.html
页面用于匹配不到静态资源的时候。hash
模式下,仅hash
符号之前的内容会被包含在请求中,如http://www.abc.com
,因此对于后端来说,即使没有做到对路由的全覆盖,也不会返回 404 错误。history
模式下,前端的URL
必须和实际向后端发起请求的URL
一致,如http://www.abc.com/book/id
。如果后端缺少对/book/id
的路由处理,将返回 404 错误。