路由-hash和history模式的区别

Vue-Router有两种模式:hash模式(默认)和history模式。

hash模式

格式

URL中带着#,如http://www.baidu.com/#/vue,hash值是#/vue

特点

  1. hash路由被称为前端路由,兼容性好,单页面应用SPA的标配。
  2. hash值会出现在URL中,但不会出现在HTTP请求中(仅hash符号之前的URL会被包含在请求中),因而对后端无影响(即改变hash值,也不会重新加载页面)

原理:onhashchange()事件

window.onhashchange = function(e){
	console.log(e.oldURL,e.newURL)
	let hash = location.hash.slice(1);
}

作用:

  1. 页面的hash值发生变化时,浏览器监听事件的改变并按规则加载相应的代码。
  2. 即便没有没有请求后端,但页面的hash值也会和对应的URL关联起来。
  3. hash值变化所对应的URL会被浏览器记录下来(因而能实现浏览器的前进和后退)。

history模式

格式

http:www.baidu.com/vue

特点

  1. 使用传统的路由分发模式,即用户在键入一个URL时,服务器会接受这个请求,并解析这个URL,然后做出相应的逻辑处理。
  2. 需要后端支持,在刷新页面时,如果没有相应的二路由或资源,就会刷出404.

API:修改历史状态&切换历史状态

  1. 修改历史状态
    • pushState()
    • repalceState()
    • pushState()和repalceState()对历史记录进行修改时,浏览器不会立即向后端发送请求。
    • 如果要做到改变URL但不刷新页面的效果,可以pushState()和repalceState()
  2. 切换历史状态
    • forward() 前进
    • back() 后退
    • go() 跳转

直接修改hash和调用history.pushState()区别

  1. pushState()设置的新URL可以与当前URL是同源的任意URL;hash只能修改#后面部分,即只能设置与当前URL通文档的URL
  2. pushState()设置的新URL可以与当前URL一样,记录也会被添加到栈中;hash设置的新URL必须与当前URL不一样才会触发动作将记录添加到栈中
  3. pushState()通过stateObject参数可以添加任意类型的数据到记录中;hash只能添加短字符串
  4. pushState()可额外设置title属性供后续使用
区别hashhistory
格式URL中有#URL中没有#
改变hash值对后端的影响需要后台支持,如果后端没有正确配置,会会返回404
改变历史状态直接修改hash调用history.pushState()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值