Vue-router 中hash模式和history模式的關系
在vue的路由配置中有mode選項 最直觀的區別就是在url中 hash 帶了一個很丑的 # 而history是沒有#的
mode:"hash";
mode:"history";
hash模式和history模式的不同
對于vue這類漸進式前端開發框架,為了構建 SPA(單頁面應用),需要引入前端路由系統,這也就是 Vue-Router 存在的意義。前端路由的核心,就在于 —— 改變視圖的同時不會向后端發出請求。
為了達到這一目的,瀏覽器當前提供了以下兩種支持:
使用場景
一般場景下,hash 和 history 都可以,除非你更在意顏值,# 符號夾雜在 URL 里看起來確實有些不太美麗。
如果不想要很丑的 hash,我們可以用路由的 history 模式,這種模式充分利用 history.pushState API 來完成URL 跳轉而無須重新加載頁面。
另外,根據 Mozilla Develop Network 的介紹,調用 history.pushState() 相比于直接修改 hash,存在以下優勢:
pushState() 設置的新 URL 可以是與當前 URL 同源的任意 URL;而 hash 只可修改 # 后面的部分,因此只能設置與當前 URL 同文檔的 URL; pushState() 設置的新 URL 可以與當前 URL 一模一樣,這樣也會把記錄添加到棧中;而 hash 設置的新值必須與原來不一樣才會觸發動作將記錄添加到棧中; pushState() 通過 stateObject 參數可以添加任意類型的數據到記錄中;而 hash 只可添加短字符串; pushState() 可額外設置 title 屬性供后續使用。當然啦,history 也不是樣樣都好。SPA 雖然在瀏覽器里游刃有余,但真要通過 URL 向后端發起 HTTP 請求時,兩者的差異就來了。尤其在用戶手動輸入 URL 后回車,或者刷新(重啟)瀏覽器的時候。
個人在接入微信的一個活動開發過程中 開始使用的hash模式,但是后面后端無法獲取到我#后面的url參數,于是就把參數寫在#前面,但是討論后還是決定去掉這個巨丑的#
新聞熱點
疑難解答
圖片精選