vue-router的兩種模式的區(qū)別

大家都知道vue是一種單頁應(yīng)用,單頁應(yīng)用就是僅在頁面初始化的時(shí)候加載相應(yīng)的html/css/js一單頁面加載完成,不會(huì)因?yàn)橛脩舻牟僮鞫M(jìn)行頁面的重新加載或者跳轉(zhuǎn),用javascript動(dòng)態(tài)的變化html的內(nèi)容

優(yōu)點(diǎn): 良好的交互體驗(yàn),用戶不需要刷新頁面,頁面顯示流暢, 良好的前后端工作分離模式,減輕服務(wù)器壓力,
缺點(diǎn): 不利于SEO,初次加載耗時(shí)比較多

1.hash模式

vue-router默認(rèn)的是hash模式—使用URL的hash來模擬一個(gè)完整的URL,于是當(dāng)URL改變的時(shí)候,頁面不會(huì)重新加載,也就是單頁應(yīng)用了,當(dāng)#后面的hash發(fā)生變化,不會(huì)導(dǎo)致瀏覽器向服務(wù)器發(fā)出請(qǐng)求,瀏覽器不發(fā)出請(qǐng)求就不會(huì)刷新頁面,并且會(huì)觸發(fā)hasChange這個(gè)事件,通過監(jiān)聽hash值的變化來實(shí)現(xiàn)更新頁面部分內(nèi)容的操作

比如這個(gè)URL:http://www.baidu.com/#/hello, hash 的值為#/hello。它的特點(diǎn)在于:hash 雖然出現(xiàn)URL中预厌,但不會(huì)被包含在HTTP請(qǐng)求中阿迈,對(duì)后端完全沒有影響,因此改變hash不會(huì)重新加載頁面轧叽。

對(duì)于hash模式會(huì)創(chuàng)建hashHistory對(duì)象,在訪問不同的路由的時(shí)候,會(huì)發(fā)生兩件事:
HashHistory.push()將新的路由添加到瀏覽器訪問的歷史的棧頂,和HasHistory.replace()替換到當(dāng)前棧頂?shù)穆酚?/p>


2.history模式

主要使用HTML5的pushState()和replaceState()這兩個(gè)api來實(shí)現(xiàn)的,pushState()可以改變url地址且不會(huì)發(fā)送請(qǐng)求,replaceState()可以讀取歷史記錄棧,還可以對(duì)瀏覽器記錄進(jìn)行修改

這兩個(gè)方法應(yīng)用于瀏覽器的歷史記錄站苗沧,在當(dāng)前已有的back、forward炭晒、go 的基礎(chǔ)之上待逞,它們提供了對(duì)歷史記錄進(jìn)行修改的功能。只是當(dāng)它們執(zhí)行修改是腰埂,雖然改變了當(dāng)前的URL飒焦,但你瀏覽器不會(huì)立即向后端發(fā)送請(qǐng)求。

window.history.pushState(stateObject, title, URL)
window.history.replaceState(stateObject, title, URL)

包括back,forward , go 三個(gè)方法

history.go(-2);//后退兩次
history.go(2);//前進(jìn)兩次
history.back(); //后退
hsitory.forward(); //前進(jìn)

區(qū)別:

前面的hashchange屿笼,你只能改變#后面的url片段牺荠。而pushState設(shè)置的新URL可以是與當(dāng)前URL同源的任意URL。
history模式則會(huì)將URL修改得就和正常請(qǐng)求后端的URL一樣,如后端沒有配置對(duì)應(yīng)/user/id的路由處理驴一,則會(huì)返回404錯(cuò)誤

404錯(cuò)誤

1休雌、hash模式下,僅hash符號(hào)之前的內(nèi)容會(huì)被包含在請(qǐng)求中肝断,如 http://www.abc.com, 因此對(duì)于后端來說杈曲,即使沒有做到對(duì)路由的全覆蓋,也不會(huì)返回404錯(cuò)誤胸懈;
2担扑、history模式下,前端的url必須和實(shí)際向后端發(fā)起請(qǐng)求的url 一致趣钱,如http://www.abc.com/book/id 涌献。如果后端缺少對(duì)/book/id 的路由處理,將返回404錯(cuò)誤首有。

原理

hash的原理是采用hashchange事件燕垃,
可以在window監(jiān)聽hash的變化枢劝。我們?cè)趗rl后面隨便添加一個(gè)#xx觸發(fā)這個(gè)事件。

history的原理是H5的幾個(gè)新API
history.pushState(data,title,url):在瀏覽器中新增一條歷史記錄卜壕;
data會(huì)在onpopstate事件觸發(fā)時(shí)作為參數(shù)傳遞過去您旁,title為頁面標(biāo)題,url為頁面地址轴捎;

history.replaceState(data,title,url):在瀏覽器中替換當(dāng)前歷史記錄鹤盒;
data會(huì)在onpopstate事件觸發(fā)時(shí)作為參數(shù)傳遞過去,title為頁面標(biāo)題轮蜕,url為頁面地址昨悼;

history.length():當(dāng)前歷史列表中的歷史記錄條數(shù);

window.onpopstate:實(shí)際上popstate是一個(gè)瀏覽器內(nèi)置的點(diǎn)擊事件跃洛,響應(yīng)pushState和replaceState的觸發(fā)調(diào)用;

history.back(-1):返回到當(dāng)前頁的上一頁(原頁面表單中的內(nèi)容會(huì)保留)

history.back(0):頁面刷新

history.back(1):當(dāng)前頁前進(jìn)一頁

history.go(-1): 返回到當(dāng)前頁的上一頁(原頁面表單中的內(nèi)容會(huì)丟失终议,效果基本和history.back(-1)一樣

history.forward():當(dāng)前頁面前進(jìn)一頁(和history.back(1)效果一樣

此外汇竭,history方法可以直接調(diào)用,例:history.pushState()穴张,也可以用window.history.pushState()來調(diào)用细燎。因?yàn)閔istory是屬于瀏覽器中的子對(duì)象,兩種調(diào)用方法都是生效的皂甘;

參考來源:https://www.jb51.net/article/162223.htm
https://blog.csdn.net/Edasi/article/details/107980498

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末玻驻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子偿枕,更是在濱河造成了極大的恐慌璧瞬,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渐夸,死亡現(xiàn)場(chǎng)離奇詭異嗤锉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)墓塌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門瘟忱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人苫幢,你說我怎么就攤上這事访诱。” “怎么了韩肝?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵触菜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我伞梯,道長(zhǎng)玫氢,這世上最難降的妖魔是什么帚屉? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮漾峡,結(jié)果婚禮上攻旦,老公的妹妹穿的比我還像新娘。我一直安慰自己生逸,他們只是感情好牢屋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著槽袄,像睡著了一般烙无。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遍尺,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天截酷,我揣著相機(jī)與錄音,去河邊找鬼乾戏。 笑死迂苛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鼓择。 我是一名探鬼主播三幻,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼呐能!你這毒婦竟也來了念搬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤摆出,失蹤者是張志新(化名)和其女友劉穎朗徊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體懊蒸,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荣倾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骑丸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舌仍。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖通危,靈堂內(nèi)的尸體忽然破棺而出铸豁,到底是詐尸還是另有隱情,我是刑警寧澤菊碟,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布节芥,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏头镊。R本人自食惡果不足惜蚣驼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望相艇。 院中可真熱鬧颖杏,春花似錦、人聲如沸坛芽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咙轩。三九已至获讳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間活喊,已是汗流浹背丐膝。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胧弛,地道東北人尤误。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像结缚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子软棺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • vue-router的兩種模式的區(qū)別 眾所周知红竭,vue-router有兩種模式,hash模式和history模式喘落,...
    前端華子閱讀 1,927評(píng)論 0 1
  • 1茵宪、大家都知道vue是一種單頁應(yīng)用,單頁應(yīng)用就是僅在頁面初始化的時(shí)候加載相應(yīng)的html/css/js一單頁面加載完...
    Kason晨閱讀 431評(píng)論 0 0
  • hash 即地址欄 URL 中的 # 符號(hào)(此 hash 不是密碼學(xué)里的散列運(yùn)算)。比如這個(gè) URL:http:/...
    meng_281e閱讀 2,531評(píng)論 0 0
  • vue-router兩種模式瘦棋,hash稀火,history 為了構(gòu)建SPA(單頁面應(yīng)用),需要引入前端路由系統(tǒng)赌朋,這就是...
    丘可_2874閱讀 4,707評(píng)論 1 1
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月凰狞,有人笑有人哭,有人歡樂有人憂愁沛慢,有人驚喜有人失落赡若,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,535評(píng)論 28 53