vue-router区分hash模式和history模式
總結:
hash模式是我們在url后面添加一個#xx觸發事件。盡管瀏覽器沒有請求服務器,但是頁面狀態和url已經關聯起來了,這就是所謂的前端路由,單頁應用的標配。
history模式下瀏覽器地址不規整(沒有#),hash只能改變#后面的url片段,而history api則可以完全替換,但history刷新容易導致錯誤(刷新是實實在在地去請求服務器的。)
?
眾所周知,vue-router有兩種模式,hash模式和history模式,這里來談談兩者的區別。
hash模式
hash模式的工作原理是hashchange事件,可以在window監聽hash的變化。我們在url后面隨便添加一個#xx觸發這個事件。
window.onhashchange = function(event){console.log(event.oldURL, event.newURL);let hash = location.hash.slice(1);document.body.style.color = hash;}打印出來的結果如下:
可以看到里邊有兩個屬性newURL和oldURL。可以通過模擬改變hsh的值,動態頁面數據。
<div id="test" style="height: 500px;width: 500px;margin: 0 auto"></div> <script>window.onhashchange = function(event){let hash = location.hash.slice(1);document.body.style.color = hash;document.getElementById('test').style.backgroundColor = hash} </script>?
盡管瀏覽器沒有請求服務器,但是頁面狀態和url已經關聯起來了,這就是所謂的前端路由,單頁應用的標配。
?
?
history模式
把window.history對象打印出來可以看到里邊提供的方法和記錄長度
前進,后退,跳轉操作方法:
history.go(-2);//后退兩次 history.go(2);//前進兩次 history.back(); //后退 hsitory.forward(); //前進HTML5新增的API
?A)history.pushState(data, title [, url]):往歷史記錄堆棧頂部添加一條記錄; data會在onpopstate事件觸發時作為?參數傳遞過去;title為頁面標題,當前所有瀏覽器都會 忽略此參數;url為頁面地址,可選,缺省為當前頁地址;
?B)history.replaceState(data, title [, url]) :更改當前的歷史記錄,參數同上;?
?C)history.state:用于存儲以上方法的data數據,不同瀏覽器的讀寫權限不一樣;
?D)window.onpopstate:響應pushState或replaceState的調用;有了這幾個新的API,針對支持的瀏覽器,我們可以構建用戶體驗更好的應用了。就像剛提到的Facebook相冊,雖然是AJAX的方式,但用戶可以直接復 制頁面地址分享給好友,
如果不想要很丑的 hash,我們可以用路由的?history 模式,這種模式充分利用?history.pushState?API 來完成 URL 跳轉而無須重新加載頁面。
const router = new VueRouter({mode: 'history',routes: [...] })當你使用 history 模式時,URL 就像正常的 url,例如?http://www.yongcun.wang/tclass,也好看!
不過這種模式要玩好,還需要后臺配置支持。因為我們的應用是個單頁客戶端應用,如果后臺沒有正確的配置,當用戶在瀏覽器直接訪問http://www.yongcun.wang/tclass就會返回 404,這就不好看了。
所以呢,你要在服務端增加一個覆蓋所有情況的候選資源:如果 URL 匹配不到任何靜態資源,則應該返回同一個?index.html?頁面,這個頁面就是你 app 依賴的頁面。
給個警告,因為這么做以后,你的服務器就不再返回 404 錯誤頁面,因為對于所有路徑都會返回?index.html?文件。為了避免這種情況,你應該在 Vue 應用里面覆蓋所有的路由情況,然后在給出一個 404 頁面。
const router = new VueRouter({mode: 'history',routes: [{ path: '*', component: NotFoundComponent }] })?
出處:https://blog.csdn.net/wang1006008051/article/details/81805932?轉載
總結
以上是生活随笔為你收集整理的vue-router区分hash模式和history模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mxnet基础到提高(24)-C++-符
- 下一篇: PowerBI随笔(1)-类似vlook