# 路由原理
- 前端路由就是匹配不同的url路径,进行解析,动态渲染出区域html的内容。
- vue路由的原理就是 在改变url的情况下,保证页面不刷新。
# hash
http://www.xxx.com/#/login
在#后面的值就是hash值
可以通过window.location.hash获取,hash值变化并不会让浏览器向服务器发送请求,不发出请求就不会刷新页面。每次hash值的变化,都会触发haschange事件
通过这个事件,我们可以得知hash值发生了什么变化。 然后便监听haschange来实现更新页面部分内容和增加浏览器历史记录的操作。使用History.push()和History.replace()来对浏览器历史记录的栈进行操作
# history
HTML5新增了两个API: pushState和replaceState
通过这两个API可以改变url地址且不会发送请求。原理与hash是一样的,且不会多出一个#
但是因为没有#,所以用户刷新页面时,浏览器还是会发送请求。使用这两个方法修改了浏览器历史记录栈
虽然url改变了,却不会发送请求。使用window.onpopstate监听。
# 比较
url
pushState设置新url可以是与当前url同源的任意url
hash只能修改#后的部分,只能设置当前同文档的url记录信息
pushState可以通过stateObject添加任何类型的数据到记录中
hash只能添加端字符串title
pushState可以设置title属性供后续使用请求
history模式会将url修改的和正常请求的url一样,需要后端做对应处理刷新
history可以输入当前页面url,实现刷新
hash输入当前路径没有变化