hash路由和history路由

路由分两种:

hash模式

url后面的有一个#,#后面的字符串,叫hash值,也叫锚点。
    1)hash 值变化不会导致浏览器向服务器发出请求
    2)hash 改变会触发 hashchange 事件 当hash值变化了,就会触发事件
    3)在 html5 的 history 出现前,基本都是使用 hash 来实现前端路由的
    4)由于hash路由,有个#,有人说比较丑
    5)hash值变化,也会引起,浏览器的前进和后退
    6)相对于history来说,hash的兼容性更好一点
    7)hash本来是拿来做页面定位的,如果拿来做路由的话,原来的锚点功能就不能用了

发起hash的方法:

 window.location.hash = "position"

history模式:

 hash 的传参是基于 url 的,如果要传递复杂的数据,会有体积的限制,而 history 模式不仅可以在url里放参数,还可以将数据存放在一个特定的对象中。
    1)history传参比hash传参再有优势
    2)使用http协议
    3)history模式,会向后端发起请求,所以说,需要后端配合,不然可能会出现404

发起 history的方法:

history.pushState({ id }, null, id),里面有很多种方法

hash路由和history路由的区别

1.hash路由在地址栏URL上有#,而history路由没有会好看一点

2.我们进行回车刷新操作,hash路由会加载到地址栏对应的页面,而history路由一般就404报错了(刷新是网络请求,没有后端准备时会报错)。

3.hash路由支持低版本的浏览器,而history路由是HTML5新增的API。

4.hash的特点在于它虽然出现在了URL中,但是不包括在http请求中,所以对于后端是没有一点影响的,所以改变hash不会重新加载页面,所以这也是单页面应用的必备。

5.history运用了浏览器的历史记录栈,之前有back,forward,go方法,之后在HTML5中新增了pushState()和replaceState()方法(需要特定浏览器的支持),它们提供了对历史记录进行修改的功能,不过在进行修改时,虽然改变了当前的URL,但是浏览器不会马上向后端发送请求。

猜你喜欢

转载自blog.csdn.net/QZ9420/article/details/112547239