前端路由兩種模式:hash與history

SPA需要在不刷新頁面的情況下做頁面更新的能力绰筛,這就需要引入前端路由枢泰,實(shí)際上,前端路由是利用了瀏覽器的hash或history屬性铝噩。


hash :

hash (url中#后面的部分)雖然出現(xiàn)在 URL 中衡蚂,但不會(huì)被包含在 http 請(qǐng)求中,對(duì)后端完全沒有影響骏庸,因此改變 hash 不會(huì)重新加載頁面毛甲。

當(dāng)hash改變時(shí),會(huì)觸發(fā)hashchange事件具被,監(jiān)聽該事件玻募,對(duì)頁面進(jìn)行更新。

? ? ? ? ? ? window.onhashchange = function() {

? ??????????????document.getElementById("demo").innerHTML = x;? ? //更新頁面內(nèi)容

? ? ? ? ? ? ? ? ......

????????????};


history :

history 利用了 html5 history interface 中新增的 pushState() 和 replaceState() 方法一姿。這兩個(gè)方法應(yīng)用于瀏覽器記錄棧七咧,

在當(dāng)前已有的 back跃惫、forward、go 基礎(chǔ)之上艾栋,它們提供了對(duì)歷史記錄 修改的功能(pushState將傳入url直接壓入歷史記錄棧爆存,replaceState將傳入url替換當(dāng)前歷史記錄棧)。

只是當(dāng)它們執(zhí)行修改時(shí)蝗砾,雖然改變了當(dāng)前的 URL 先较,但瀏覽器不會(huì)立即向后端發(fā)送請(qǐng)求。

? ??????????????pushState()悼粮、replaceState() 方法接收三個(gè)參數(shù):stateObj闲勺、title、url

? ? ? ? ? ? ? ? history.pushState({color: "red"}, "red", "red")矮锈;//設(shè)置狀態(tài)

? ??????????????window.onpopstate = function(event) {? //監(jiān)聽狀態(tài)

? ???????????????????if(event.state && event.state.color === "red") {

? ? ? ? ? ? ? ? ? ? ? ? ?document.body.style.color = "red";? ??//更新頁面內(nèi)容

? ? ? ? ? ? ? ? ? ? ? }

????????????????}

? ? ? ? ? ? ? ??// 改變狀態(tài)? *在使用history API改變?yōu)g覽器的url時(shí)霉翔,仍需要額外的步驟去觸發(fā)?popstate?事件,例如調(diào)用?history.back() 和 history.forward()?等方法

? ??????????????history.back();

? ??????????????history.forward();


history 對(duì)比? hash?

優(yōu)勢(shì):

pushState 設(shè)置的 url 可以是同源下的任意 url 苞笨;而 hash 只能修改 # 后面的部分债朵,因此只能設(shè)置當(dāng)前 url 同文檔的 url。

pushState 設(shè)置的新的 url 可以與當(dāng)前 url 一樣瀑凝,這樣也會(huì)把記錄添加到棧中序芦;hash 設(shè)置的新值不能與原來的一樣,一樣的值不會(huì)觸發(fā)動(dòng)作將記錄添加到棧中粤咪。

pushState 通過 stateObject 參數(shù)可以將任何數(shù)據(jù)類型添加到記錄中谚中;hash 只能添加短字符串。

pushState 可以設(shè)置額外的 title 屬性供后續(xù)使用寥枝。


劣勢(shì):

history 在刷新頁面時(shí)宪塔,如果服務(wù)器中沒有相應(yīng)的響應(yīng)或資源,就會(huì)出現(xiàn)404囊拜。因此某筐,如果 URL 匹配不到任何靜態(tài)資源,則應(yīng)該返回同一個(gè) index.html 頁面冠跷,這個(gè)頁面就是你 app 依賴的頁面南誊。

hash 模式下,僅 # 之前的內(nèi)容包含在 http 請(qǐng)求中蜜托,對(duì)后端來說抄囚,即使沒有對(duì)路由做到全面覆蓋,也不會(huì)報(bào) 404橄务。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末幔托,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蜂挪,更是在濱河造成了極大的恐慌柑司,老刑警劉巖迫肖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锅劝,死亡現(xiàn)場(chǎng)離奇詭異攒驰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)故爵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門玻粪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诬垂,你說我怎么就攤上這事劲室。” “怎么了结窘?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵很洋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我隧枫,道長(zhǎng)喉磁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任官脓,我火速辦了婚禮协怒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卑笨。我一直安慰自己孕暇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布赤兴。 她就那樣靜靜地躺著妖滔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桶良。 梳的紋絲不亂的頭發(fā)上座舍,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音艺普,去河邊找鬼簸州。 笑死,一個(gè)胖子當(dāng)著我的面吹牛歧譬,可吹牛的內(nèi)容都是我干的岸浑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼瑰步,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼矢洲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缩焦,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤读虏,失蹤者是張志新(化名)和其女友劉穎责静,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盖桥,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灾螃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了揩徊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腰鬼。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖塑荒,靈堂內(nèi)的尸體忽然破棺而出熄赡,到底是詐尸還是另有隱情,我是刑警寧澤齿税,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布彼硫,位于F島的核電站,受9級(jí)特大地震影響凌箕,放射性物質(zhì)發(fā)生泄漏拧篮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一陌知、第九天 我趴在偏房一處隱蔽的房頂上張望他托。 院中可真熱鬧,春花似錦仆葡、人聲如沸赏参。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽把篓。三九已至,卻和暖如春腰涧,著一層夾襖步出監(jiān)牢的瞬間韧掩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工窖铡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疗锐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓费彼,卻偏偏與公主長(zhǎng)得像滑臊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子箍铲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344