国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

路由的hash和history模式的區(qū)別

這篇具有很好參考價(jià)值的文章主要介紹了路由的hash和history模式的區(qū)別。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

? 路由模式概述

一. 路由的hash和history模式的區(qū)別

1. hash模式

2. history模式

3. 兩種模式對(duì)比

二. 如何獲取頁(yè)面的hash變化


路由的hash和history模式的區(qū)別,Vue.js學(xué)習(xí)筆記,history,hash,hashChange,pushState,路由模式

? 路由模式概述

單頁(yè)應(yīng)用是在移動(dòng)互聯(lián)時(shí)代誕生的,它的目標(biāo)是不刷新整體頁(yè)面,通過(guò)地址欄中的變化來(lái)決定內(nèi)容區(qū)域顯示什么內(nèi)容。

要達(dá)成這個(gè)目標(biāo),我們要用到前端路由技術(shù),具體來(lái)說(shuō)有兩種方式來(lái)實(shí)現(xiàn):hash模式和history模式。hash模式是通過(guò)監(jiān)聽(tīng)hashChange事件來(lái)實(shí)現(xiàn)的,history模式是通過(guò)pushState方法+popstate事件來(lái)實(shí)現(xiàn)的。?

一. 路由的hash和history模式的區(qū)別

Vue-Router有兩種模式:hash模式和history模式。默認(rèn)的路由模式是hash模式。

1. hash模式

?? 簡(jiǎn)介

hash模式(又稱(chēng)哈希路由)是開(kāi)發(fā)中默認(rèn)的模式,它的URL帶著一個(gè)#,例如:http://www.abc.com/#/vue,它的hash值就是#/vue。

?? 特點(diǎn)

hash值會(huì)出現(xiàn)在URL里面,但是不會(huì)出現(xiàn)在HTTP請(qǐng)求中,對(duì)后端完全沒(méi)有影響,所以改變hash值,不會(huì)重新加載頁(yè)面。這種模式的瀏覽器支持度很好,低版本的IE瀏覽器也支持這種模式。 hash路由被稱(chēng)為是前端路由,已經(jīng)成為SPA(單頁(yè)面應(yīng)用)的標(biāo)配。

?? 原理

hash模式的主要原理就是onhashchange()事件:

window.onhashchange = function(event){
	console.log(event.oldURL, event.newURL);
	let hash = location.hash.slice(1);
}

使用onhashchange()事件的好處就是,在頁(yè)面的hash值發(fā)生變化時(shí),無(wú)需向后端發(fā)起請(qǐng)求,window就可以監(jiān)聽(tīng)事件的改變,并按規(guī)則加載相應(yīng)的代碼。 除此之外,hash值變化對(duì)應(yīng)的URL都會(huì)被瀏覽器記錄下來(lái),這樣瀏覽器就能實(shí)現(xiàn)頁(yè)面的前進(jìn)和后退。雖然是沒(méi)有請(qǐng)求后端服務(wù)器,但是頁(yè)面的hash值和對(duì)應(yīng)的URL關(guān)聯(lián)起來(lái)了。

hash模式是一種把前端路由的路徑用 # 拼接在真實(shí)URL后面的模式。形式上,hash模式url里面永遠(yuǎn)帶著#號(hào),開(kāi)發(fā)當(dāng)中默認(rèn)使用這個(gè)模式

原理是通過(guò)location.hash屬性設(shè)置#后面的路徑發(fā)生變化,并且瀏覽器并不會(huì)重新發(fā)起請(qǐng)求

只要hash地址發(fā)生改變,則會(huì)觸發(fā)hashchange事件,我們?cè)谑录性O(shè)置地址對(duì)應(yīng)的視圖展示
?

hash模式的瀏覽器兼容性較好,就是看起來(lái)不夠優(yōu)雅。如果用戶(hù)考慮url的規(guī)范,那么就需要使用history模式,因?yàn)閔istory模式?jīng)]有#號(hào),是個(gè)正常的url,適合推廣宣傳;

2. history模式

?? 簡(jiǎn)介

history模式(又稱(chēng)歷史路由)的URL中沒(méi)有#,它使用的是傳統(tǒng)的路由分發(fā)模式,即用戶(hù)在輸入一個(gè)URL時(shí),服務(wù)器會(huì)接收這個(gè)請(qǐng)求,并解析這個(gè)URL,然后做出相應(yīng)的邏輯處理。

?? 特點(diǎn)

當(dāng)使用history模式時(shí),URL就像這樣:http://abc.com/user/id。相比hash模式更加好看。但是,history模式需要后臺(tái)配置支持。如果后臺(tái)沒(méi)有正確配置,訪問(wèn)時(shí)會(huì)返回404。

history模式開(kāi)發(fā)的SPA項(xiàng)目,需要服務(wù)器端做額外的配置,否則會(huì)出現(xiàn)刷新白屏(鏈接分享失效)。原因是頁(yè)面刷新時(shí),瀏覽器會(huì)向服務(wù)器真的發(fā)出對(duì)這個(gè)地址的請(qǐng)求,而這個(gè)文件資源又不存在,所以就報(bào)404。處理方式就由后端做一個(gè)保底映射:所有的請(qǐng)求全部攔截到index.html上。

?? API

history api可以分為兩大部分,切換歷史狀態(tài)和修改歷史狀態(tài):

修改歷史狀態(tài):包括了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法,這兩個(gè)方法應(yīng)用于瀏覽器的歷史記錄棧,提供了對(duì)歷史記錄進(jìn)行修改的功能。只是當(dāng)他們進(jìn)行修改時(shí),雖然修改了url,但瀏覽器不會(huì)立即向后端發(fā)送請(qǐng)求。如果要做到改變url但又不刷新頁(yè)面的效果,就需要前端用上這兩個(gè)API。

切換歷史狀態(tài): 包括forward()、back()、go()三個(gè)方法,對(duì)應(yīng)瀏覽器的前進(jìn),后退,跳轉(zhuǎn)操作。
雖然history模式丟棄了丑陋的#。但是,它也有自己的缺點(diǎn),就是在刷新頁(yè)面的時(shí)候,如果沒(méi)有相應(yīng)的路由或資源,就會(huì)刷出404來(lái)。 如果想要切換到history模式,就要進(jìn)行以下配置(后端也要進(jìn)行配置):

const router = new VueRouter({
  mode: 'history',
  routes: [...]
})

history模式用到了HTML5中的history API,允許開(kāi)發(fā)者直接更新瀏覽器URL地址而不重新發(fā)起請(qǐng)求。

用到了history API:replaceState、pushState、back、forward和go這個(gè)5個(gè)方法。

但是歷史記錄改變以后,視圖并不會(huì)更新,我們需要在地址改變(包括使用onpopstate事件監(jiān)聽(tīng)歷史記錄的回退)后,重新設(shè)置視圖

history兼容性不如hash模式,而且瀏覽器在刷新的時(shí)候會(huì)按照路徑發(fā)送真實(shí)的資源請(qǐng)求,因此在線(xiàn)上部署基于historyAPI的單頁(yè)面應(yīng)用的時(shí)候,一定要后端配合支持才行(如果 URL 匹配不到任何靜態(tài)資源,則應(yīng)該返回同一個(gè) index.html 頁(yè)面)?

? 小 結(jié):

???? 兩者原理不同

hash模式的實(shí)現(xiàn)原理是通過(guò)監(jiān)聽(tīng)hashChange事件來(lái)實(shí)現(xiàn)的。

history模式是通過(guò)調(diào)用history.pushState方法(或者replaceState) 并且監(jiān)聽(tīng)popstate事件來(lái)實(shí)現(xiàn)的。history.pushState會(huì)追加歷史記錄,并更換地址欄地址信息,但是頁(yè)面不會(huì)刷新,需要手動(dòng)調(diào)用地址變化之后的處理函數(shù),并在處理函數(shù)內(nèi)部決定跳轉(zhuǎn)邏輯;監(jiān)聽(tīng)popstate事件是為了響應(yīng)瀏覽器的前進(jìn)后退功能。

???? 兩者表現(xiàn)不同

hash模式會(huì)在地址欄中有#號(hào),而history模式?jīng)]有;同時(shí)由于history模式的實(shí)現(xiàn)原理用到H5的新特性,所以它對(duì)瀏覽器的兼容性有要求(IE >= 10)。?

3. 兩種模式對(duì)比

調(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ù)可以添加任意類(lèi)型的數(shù)據(jù)到記錄中;而 hash 只可添加短字符串;
  • pushState() 可額外設(shè)置 title 屬性供后續(xù)使用。
  • hash模式下,僅hash符號(hào)之前的url會(huì)被包含在請(qǐng)求中,后端如果沒(méi)有做到對(duì)路由的全覆蓋,也不會(huì)返回404錯(cuò)誤;history模式下,前端的url必須和實(shí)際向后端發(fā)起請(qǐng)求的url一致,如果沒(méi)有對(duì)用的路由處理,將返回404錯(cuò)誤。

hash模式和history模式都有各自的優(yōu)勢(shì)和缺陷,我們還是要根據(jù)實(shí)際情況選擇性的使用。

二. 如何獲取頁(yè)面的hash變化

(1)監(jiān)聽(tīng)$route的變化

// 監(jiān)聽(tīng),當(dāng)路由發(fā)生變化的時(shí)候執(zhí)行
watch: {
  $route: {
    handler: function(val, oldVal){
      console.log(val);
    },
    // 深度觀察監(jiān)聽(tīng)
    deep: true
  }
},

(2)window.location.hash讀取#值 window.location.hash 的值可讀可寫(xiě),讀取來(lái)判斷狀態(tài)是否改變,寫(xiě)入時(shí)可以在不重載網(wǎng)頁(yè)的前提下,添加一條歷史訪問(wèn)記錄。

參考資料:vue路由和vue3總結(jié)

路由的hash和history模式的區(qū)別,Vue.js學(xué)習(xí)筆記,history,hash,hashChange,pushState,路由模式文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-628369.html

到了這里,關(guān)于路由的hash和history模式的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 路由hash模式改成history模式的前端vue配置與后端配置

    示例項(xiàng)目地址:http://172.00.00.000:8888/Web/static/index.html/index ,其中: /Web/static/ 表示項(xiàng)目部署路徑,每個(gè)人的路徑不一樣,vue默認(rèn)路徑是根路徑/,如果你項(xiàng)目不是部署在根路徑,那就需要修改一些配置 index.html 表示項(xiàng)目入口文件 /index 表示項(xiàng)目首頁(yè)的路由地址 vue前端配置 1.配置路

    2024年02月15日
    瀏覽(29)
  • 前端路由hash模式以及history模式詳解

    前端路由hash模式以及history模式詳解

    在前后端分離的項(xiàng)目中,前端一般使用 SPA 單頁(yè)面應(yīng)用模式來(lái)開(kāi)發(fā)項(xiàng)目。那么,什么是 SPA 呢? 單頁(yè)Web應(yīng)用(single page web application,SPA),就是只有一張Web頁(yè)面的應(yīng)用,是加載單個(gè)HTML 頁(yè)面并在用戶(hù)與應(yīng)用程序交互時(shí)動(dòng)態(tài)更新該頁(yè)面的Web應(yīng)用程序。 我的理解: 單頁(yè)面應(yīng)用就是

    2024年02月10日
    瀏覽(28)
  • 解密前端路由: hash模式vs.history模式

    解密前端路由: hash模式vs.history模式

    當(dāng)你構(gòu)建一個(gè)網(wǎng)站時(shí),可能會(huì)遇到如何處理 URL 的問(wèn)題。在URL中,有兩種常見(jiàn)的模式: hash模式和history模式 。 1. Hash模式(哈希模式): 在 hash 模式中, URL 中的 hash (即#號(hào)后面的部分)用于標(biāo)記網(wǎng)頁(yè)的不同部分或狀態(tài)。當(dāng) URL 的 hash 發(fā)生改變時(shí),頁(yè)面不會(huì)重新加載,而是通

    2024年02月11日
    瀏覽(32)
  • vueRouter中Hash模式和History模式有什么區(qū)別

    vueRouter中Hash模式和History模式有什么區(qū)別

    VueRouter是Vue.js官方推薦的前端路由庫(kù),它提供了一種方便的方式來(lái)構(gòu)建單頁(yè)應(yīng)用(SPA)。在使用VueRouter時(shí),我們可以選擇不同的路由模式,其中最常見(jiàn)的是Hash模式和History模式。本文將深入探討這兩種模式的區(qū)別,并提供示例代碼來(lái)幫助讀者更好地理解它們。 Hash模式是VueRo

    2024年02月19日
    瀏覽(21)
  • Vue history和hash模式

    ???????? ~~~~~~~~ ? ? ? ? ? ? ? ? 在Vue.js中,路由模式是用來(lái)管理應(yīng)用程序中不同頁(yè)面之間的導(dǎo)航的機(jī)制。Vue Router支持兩種常見(jiàn)的路由模式:history模式和hash模式。 History 模式: ???????? ~~~~~~~~ ? ? ? ? ? ? ? ? History模式使用瀏覽器的history.pushState API 來(lái)管理路由。它

    2024年02月12日
    瀏覽(28)
  • vue3中路由hash與History的設(shè)置

    ?history模式直接指向history對(duì)象,它表示當(dāng)前窗口的瀏覽歷史,history對(duì)象保存了當(dāng)前窗口訪問(wèn)過(guò)的所有頁(yè)面網(wǎng)址。URL中沒(méi)有#,它使用的是傳統(tǒng)的路由分發(fā)模式,即用戶(hù)在輸入一個(gè)URL時(shí),服務(wù)器會(huì)接收這個(gè)請(qǐng)求,并解析這個(gè)URL,然后做出相應(yīng)的邏輯處理。 當(dāng)使用history模式時(shí),

    2024年02月16日
    瀏覽(33)
  • Vue-router中的Hash模式與History模式

    在Vue Router中,Hash模式是一種URL的哈希模式,也被稱(chēng)為錨點(diǎn)模式。在Hash模式下,URL中的哈希部分(即#號(hào)后面的內(nèi)容)會(huì)被用作路由的標(biāo)識(shí)符,而不會(huì)觸發(fā)瀏覽器向服務(wù)器發(fā)送請(qǐng)求。 Hash模式的URL示例: http://example.com/#/home 在Hash模式下,Vue Router會(huì)監(jiān)聽(tīng)URL中哈希部分的變化,并

    2024年02月15日
    瀏覽(18)
  • Vue3 Vue-Router詳解 Vue3配置hash 和 history路由、Vue3封裝的路由hook函數(shù)(useRouter,useRoute)的使用 路由懶加載、路由分包處理、魔法注釋的使用

    ?html部分 js部分 ?html頁(yè)面使用路由傳來(lái)的參數(shù) ?獲取router跳轉(zhuǎn)id 獲取?路由跳轉(zhuǎn)錯(cuò)誤地址

    2024年02月11日
    瀏覽(24)
  • VUE 配置history路由模式配置

    vue-router 默認(rèn) hash 模式 —— 使用 URL 的 hash 來(lái)模擬一個(gè)完整的 URL,于是當(dāng) URL 改變時(shí),頁(yè)面不會(huì)重新加載。 如果不想要很丑的 hash,我們可以用路由的 history 模式,這種模式充分利用 history.pushState API 來(lái)完成 URL 跳轉(zhuǎn)而無(wú)須重新加載頁(yè)面。 當(dāng)你使用 history 模式時(shí),URL 就像正常

    2024年02月10日
    瀏覽(27)
  • Vue路由模式(history模式 刷新頁(yè)面空白解決方案)

    Vue路由模式(history模式 刷新頁(yè)面空白解決方案)

    vue路由的三種模式 Hash模式 、 History模式 、 abstract 模式 Vue3: Hash 模式是用 createWebHashHistory() 創(chuàng)建的: Vue2 它在內(nèi)部傳遞的實(shí)際 URL 之前使用了一個(gè)哈希字符(#)。由于這部分 URL 從未被發(fā)送到服務(wù)器,所以它不需要在服務(wù)器層面上進(jìn)行任何特殊處理。不過(guò),它在 SEO 中確實(shí)有

    2024年02月12日
    瀏覽(34)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包