日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

vue-router区分hash模式和history模式

發布時間:2025/3/12 vue 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。