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)可以攜帶狀態信息去下一個路由,這樣對權限判斷之類提供了便捷,這是跟哈希路由最大的區別。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章