眾所周知vue-router有兩種模式,hash模式和history模式
hash模式:
hash模式的原理是onhashchange事件,可以通過window對象來監(jiān)聽該事件
在hash模式下碉纳,當(dāng)url發(fā)生變化時(shí)镇草,瀏覽器會記錄下來乘凸,因此前進(jìn)后退按鈕都可以使用
history.go(-2);
history.go(2);
history.back();
history.forward();
因此在該模式下橘券,即使瀏覽器沒有請求服務(wù)器,頁面也會和url一一對應(yīng)起來描馅,后來人們給它起了一個(gè)霸氣的名字叫前端路由把夸,成為了單頁應(yīng)用標(biāo)配。
需要注意的是hash模式下修改的是#后面的內(nèi)容铭污,使用 URL 的 hash 來模擬一個(gè)完整的 URL恋日,于是當(dāng) URL 改變時(shí),頁面不會重新加載嘹狞。
history模式:
如果不想要很丑的hash模式岂膳,我們可以使用history模式,當(dāng)我們使用history模式時(shí)磅网,url就像正常的url ---》http://www.reibang.com/writer#/notebooks/26443051/notes/33561921谈截,沒有#
但是如果想要玩這種模式,還需要后臺的配置支持,因?yàn)槲覀兊膽?yīng)用是個(gè)單頁客戶端應(yīng)用簸喂,如果后臺沒有正確的配置毙死,當(dāng)用戶在瀏覽器直接訪問?http://oursite.com/user/id?就會返回 404,這就不好看了娘赴。
所以呢规哲,你要在服務(wù)端增加一個(gè)覆蓋所有情況的候選資源:如果 URL 匹配不到任何靜態(tài)資源,則應(yīng)該返回同一個(gè)?index.html?頁面诽表,這個(gè)頁面就是你 app 依賴的頁面。
警告
給個(gè)警告隅肥,因?yàn)檫@么做以后竿奏,你的服務(wù)器就不再返回 404 錯(cuò)誤頁面,因?yàn)閷τ谒新窂蕉紩祷?index.html?文件腥放。為了避免這種情況泛啸,你應(yīng)該在 Vue 應(yīng)用里面覆蓋所有的路由情況,然后在給出一個(gè) 404 頁面秃症。
history模式怕啥候址?
history模式中也有可以實(shí)現(xiàn)前進(jìn)、后退以及跳轉(zhuǎn)种柑,但是遇到F5(刷新)就掛了岗仑,因?yàn)樗⑿率菍?shí)實(shí)在在地去請求服務(wù)器的,我們前面說了hash模式只是修改#中的內(nèi)容聚请,而瀏覽器請求是不帶它玩的荠雕,所以沒什么問題,但是在history模式中驶赏,我們可以自由的修改path炸卑,當(dāng)刷新時(shí),如果服務(wù)器中沒有相應(yīng)的響應(yīng)或者資源煤傍,分分鐘刷出一個(gè)4048俏摹!蚯姆!
好久沒更了^_^