hash路由VSbrowser路由

 hash路由

长什么样?:http://[domain]/#/xxx/xxx

实现原理: hash值的变化会触发浏览器的window.onhashchange事件,浏览器不会去请求后端url


哈希路由就是路由上面有个#,以前是用来做锚点的,很多人可能会想知道这个hash路由和锚点到底有啥区别?
锚点实际上是通过#后面的东西来跳到对应相同id的元素。
而哈希路由是监听这个哈希路由改变的事件,渲染相对应的页面元素。


那么问题来了,2者是同时起效还是有一个不起作用还是根本就冲突?

 

查看hash可以调用window.location.hash,如果给这个赋值,最开始的井号可以写也可以不写,对应的是一个哈希。也就是#/a/a是一个路径,路径上都会写成#/a

 

 

browser路由

长什么样?:http://[domain]/xxx/xxx

 实现原理:浏览器会向后端发送url请求,需要后端配置不然刷新页面后请求不到页面。核心api是pushState、replaceState,

                    路由切换跳转会触发window.onpopstate事件

 

 

  • browser路由主要是靠对window.history的操作。这个api有个特点,就是往history里push路由,会跳到相应路由,但没有监听函数,而回退操作却有监听函数。
  • 由于没有push监听函数,所以可以对其进行改写
  • window.history.pushState(data,title,url)可以携带状态信息去下一个路由,这样对权限判断之类提供了便捷,这是跟哈希路由最大的区别。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章