最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue-router 中hash模式和history模式的區(qū)別

 更新時(shí)間:2018年07月24日 10:29:47   作者:Chaos  
這篇文章主要介紹了Vue-router 中hash模式和history模式的區(qū)別,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

Vue-router 中hash模式和history模式的關(guān)系

在vue的路由配置中有mode選項(xiàng) 最直觀的區(qū)別就是在url中 hash 帶了一個(gè)很丑的 # 而history是沒(méi)有#的

mode:"hash";  
mode:"history"; 

hash模式和history模式的不同

對(duì)于vue這類漸進(jìn)式前端開發(fā)框架,為了構(gòu)建 SPA(單頁(yè)面應(yīng)用),需要引入前端路由系統(tǒng),這也就是 Vue-Router 存在的意義。前端路由的核心,就在于 —— 改變視圖的同時(shí)不會(huì)向后端發(fā)出請(qǐng)求。

為了達(dá)到這一目的,瀏覽器當(dāng)前提供了以下兩種支持:

  • hash —— 即地址欄 URL 中的 # 符號(hào)(此 hash 不是密碼學(xué)里的散列運(yùn)算)。比如這個(gè) URL:http://www.abc.com/#/hello,hash 的值為 #/hello。它的特點(diǎn)在于:hash 雖然出現(xiàn)在 URL 中,但不會(huì)被包括在 HTTP 請(qǐng)求中,對(duì)后端完全沒(méi)有影響,因此改變 hash 不會(huì)重新加載頁(yè)面。
  • history —— 利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。(需要特定瀏覽器支持)這兩個(gè)方法應(yīng)用于瀏覽器的歷史記錄棧,在當(dāng)前已有的 back、forward、go 的基礎(chǔ)之上,它們提供了對(duì)歷史記錄進(jìn)行修改的功能。只是當(dāng)它們執(zhí)行修改時(shí),雖然改變了當(dāng)前的 URL,但瀏覽器不會(huì)立即向后端發(fā)送請(qǐng)求。
  • 因此可以說(shuō),hash 模式和 history 模式都屬于瀏覽器自身的特性,Vue-Router 只是利用了這兩個(gè)特性(通過(guò)調(diào)用瀏覽器提供的接口)來(lái)實(shí)現(xiàn)前端路由.

使用場(chǎng)景

一般場(chǎng)景下,hash 和 history 都可以,除非你更在意顏值,# 符號(hào)夾雜在 URL 里看起來(lái)確實(shí)有些不太美麗。

如果不想要很丑的 hash,我們可以用路由的 history 模式,這種模式充分利用 history.pushState API 來(lái)完成URL 跳轉(zhuǎn)而無(wú)須重新加載頁(yè)面。

另外,根據(jù) Mozilla Develop Network 的介紹,調(diào)用 history.pushState() 相比于直接修改 hash,存在以下優(yōu)勢(shì):

  • pushState() 設(shè)置的新 URL 可以是與當(dāng)前 URL 同源的任意 URL;而 hash 只可修改 # 后面的部分,因此只能設(shè)置與當(dāng)前 URL 同文檔的 URL;
  • pushState() 設(shè)置的新 URL 可以與當(dāng)前 URL 一模一樣,這樣也會(huì)把記錄添加到棧中;而 hash 設(shè)置的新值必須與原來(lái)不一樣才會(huì)觸發(fā)動(dòng)作將記錄添加到棧中;
  • pushState() 通過(guò) stateObject 參數(shù)可以添加任意類型的數(shù)據(jù)到記錄中;而 hash 只可添加短字符串;
  • pushState() 可額外設(shè)置 title 屬性供后續(xù)使用。

當(dāng)然啦,history 也不是樣樣都好。SPA 雖然在瀏覽器里游刃有余,但真要通過(guò) URL 向后端發(fā)起 HTTP 請(qǐng)求時(shí),兩者的差異就來(lái)了。尤其在用戶手動(dòng)輸入 URL 后回車,或者刷新(重啟)瀏覽器的時(shí)候。

個(gè)人在接入微信的一個(gè)活動(dòng)開發(fā)過(guò)程中 開始使用的hash模式,但是后面后端無(wú)法獲取到我#后面的url參數(shù),于是就把參數(shù)寫在#前面,但是討論后還是決定去掉這個(gè)巨丑的#

于是乎改用history模式,但是開始跑流程的時(shí)候是沒(méi)問(wèn)題,但是后來(lái)發(fā)現(xiàn)跳轉(zhuǎn)后刷新或者回跳,會(huì)報(bào)一個(gè)404的錯(cuò)誤,找不到指定的路由,最后后端去指向正確的路由 加了/hd/xxx 去匹配是否有這個(gè)/hd/{:path} 才得以解決

總結(jié)

1 hash 模式下,僅 hash 符號(hào)之前的內(nèi)容會(huì)被包含在請(qǐng)求中,如 http://www.abc.com,因此對(duì)于后端來(lái)說(shuō),即使沒(méi)有做到對(duì)路由的全覆蓋,也不會(huì)返回 404 錯(cuò)誤。

2 history 模式下,前端的 URL 必須和實(shí)際向后端發(fā)起請(qǐng)求的 URL 一致,如 http://www.abc.com/book/id。如果后端缺少對(duì) /book/id 的路由處理,將返回 404 錯(cuò)誤。Vue-Router 官網(wǎng)里如此描述:“不過(guò)這種模式要玩好,還需要后臺(tái)配置支持……所以呢,你要在服務(wù)端增加一個(gè)覆蓋所有情況的候選資源:如果 URL 匹配不到任何靜態(tài)資源,則應(yīng)該返回同一個(gè) index.html 頁(yè)面,這個(gè)頁(yè)面就是你 app 依賴的頁(yè)面。”

3 結(jié)合自身例子,對(duì)于一般的 Vue + Vue-Router + Webpack + XXX 形式的 Web 開發(fā)場(chǎng)景,用 history 模式即可,只需在后端(Apache 或 Nginx)進(jìn)行簡(jiǎn)單的路由配置,同時(shí)搭配前端路由的 404 頁(yè)面支持。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue.js過(guò)濾器+ajax實(shí)現(xiàn)事件監(jiān)聽及后臺(tái)php數(shù)據(jù)交互實(shí)例

    vue.js過(guò)濾器+ajax實(shí)現(xiàn)事件監(jiān)聽及后臺(tái)php數(shù)據(jù)交互實(shí)例

    這篇文章主要介紹了vue.js過(guò)濾器+ajax實(shí)現(xiàn)事件監(jiān)聽及后臺(tái)php數(shù)據(jù)交互,結(jié)合實(shí)例形式分析了vue.js前臺(tái)過(guò)濾器與ajax后臺(tái)數(shù)據(jù)交互相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • 詳解vuex中mutation/action的傳參方式

    詳解vuex中mutation/action的傳參方式

    這篇文章主要介紹了詳解vuex中mutation/action的傳參方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 基于Vue3+WebSocket實(shí)現(xiàn)實(shí)時(shí)文件傳輸監(jiān)控系統(tǒng)

    基于Vue3+WebSocket實(shí)現(xiàn)實(shí)時(shí)文件傳輸監(jiān)控系統(tǒng)

    WebSocket是一種在客戶端和服務(wù)器之間進(jìn)行雙向通信的網(wǎng)絡(luò)協(xié)議,它通過(guò)建立持久性的、全雙工的連接,允許服務(wù)器主動(dòng)向客戶端發(fā)送數(shù)據(jù),本文小編給大家介紹了基于Vue3+WebSocket實(shí)現(xiàn)實(shí)時(shí)文件傳輸監(jiān)控系統(tǒng),需要的朋友可以參考下
    2025-03-03
  • VUE識(shí)別訪問(wèn)設(shè)備是pc端還是移動(dòng)端的實(shí)現(xiàn)步驟

    VUE識(shí)別訪問(wèn)設(shè)備是pc端還是移動(dòng)端的實(shí)現(xiàn)步驟

    經(jīng)常在項(xiàng)目中會(huì)有支持pc與手機(jī)端需求,并且pc與手機(jī)端是兩個(gè)不一樣的頁(yè)面,這時(shí)就要求判斷設(shè)置,下面這篇文章主要給大家介紹了關(guān)于VUE識(shí)別訪問(wèn)設(shè)備是pc端還是移動(dòng)端的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • Vue響應(yīng)式系統(tǒng)的原理詳解

    Vue響應(yīng)式系統(tǒng)的原理詳解

    這篇文章主要為大家介紹了Vue響應(yīng)式系統(tǒng)的原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • 解決vue點(diǎn)擊控制單個(gè)樣式的問(wèn)題

    解決vue點(diǎn)擊控制單個(gè)樣式的問(wèn)題

    今天小編就為大家分享一篇解決vue點(diǎn)擊控制單個(gè)樣式的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • Vue-cropper 圖片裁剪的基本原理及思路講解

    Vue-cropper 圖片裁剪的基本原理及思路講解

    這篇文章主要介紹了Vue-cropper 圖片裁剪的基本原理及思路講解,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-04-04
  • 詳解如何使用vue-cli腳手架搭建Vue.js項(xiàng)目

    詳解如何使用vue-cli腳手架搭建Vue.js項(xiàng)目

    這篇文章主要介紹了詳解如何使用vue-cli腳手架搭建Vue.js項(xiàng)目 ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • swiper/vue 獲取 swiper實(shí)例方法詳解

    swiper/vue 獲取 swiper實(shí)例方法詳解

    在網(wǎng)上搜了一下如何調(diào)用swiper實(shí)例,大部分都是通過(guò) swiperRef = new Swiper(‘.swiper’, options) 這種方法初始化swiper,然后直接能用 swiperRef 實(shí)例,這篇文章主要介紹了swiper/vue 獲取 swiper實(shí)例方法詳解,需要的朋友可以參考下
    2023-12-12
  • VUE2.0+ElementUI2.0表格el-table循環(huán)動(dòng)態(tài)列渲染的寫法詳解

    VUE2.0+ElementUI2.0表格el-table循環(huán)動(dòng)態(tài)列渲染的寫法詳解

    這篇文章主要介紹了VUE2.0+ElementUI2.0表格el-table循環(huán)動(dòng)態(tài)列渲染的寫法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11

最新評(píng)論

大庆市| 延津县| 绥棱县| 洛浦县| 淅川县| 桃江县| 郁南县| 郓城县| 鸡西市| 道真| 临潭县| 建湖县| 静乐县| 新疆| 英吉沙县| 图木舒克市| 吉安县| 上饶县| 苍山县| 南宫市| 墨竹工卡县| 商城县| 乌审旗| 札达县| 花垣县| 襄垣县| 泸定县| 调兵山市| 都兰县| 鄄城县| 囊谦县| 涡阳县| 普洱| 万年县| 赤水市| 桐庐县| 桂林市| 务川| 靖边县| 徐州市| 海南省|