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

區(qū)分vue-router的hash和history模式

 更新時間:2020年10月03日 10:03:32   作者:guo&qi  
這篇文章主要介紹了區(qū)分vue-router的hash和history模式,幫助大家更好的理解和學(xué)習(xí)vue路由,感興趣的朋友可以了解下

一、概念

  為了構(gòu)建 SPA(單頁面應(yīng)用),需要引入前端路由系統(tǒng),這也就是 Vue-Router 存在的意義。

  前端路由的核心,就在于:改變視圖的同時不會向后端發(fā)出請求。

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

  1.hash——即地址欄 URL 中的 # 符號(此 hash 不是密碼學(xué)里的散列運算)。

   比如這個 URL:http://www.abc.com/#/hello,hash 的值為 #/hello。
   它的特點在于:hash 雖然出現(xiàn)在 URL 中,但不會被包括在 HTTP 請求中,對后端完全沒有影響,因此改變 hash 不會重新加載頁面。

  2.history —— 利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。

   這兩個方法應(yīng)用于瀏覽器的歷史記錄棧,在當(dāng)前已有的 back、forward、go 的基礎(chǔ)之上,它們提供了對歷史記錄進行修改的功能。
   只是當(dāng)它們執(zhí)行修改時,雖然改變了當(dāng)前的 URL,但瀏覽器不會立即向后端發(fā)送請求。

二、hash模式

  hash模式背后的原理是onhashchange事件,可以在window對象上監(jiān)聽這個事件:

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

  這段可以在hash改變的時候改變字體顏色。

  hash發(fā)生變化的url都會被瀏覽器記錄下來,從而你會發(fā)現(xiàn)瀏覽器的前進后退都可以使用了,同時點擊后退時,頁面字體顏色也會發(fā)生變化。

  這樣一來雖然沒有向后端發(fā)送請求,但是頁面狀態(tài)和url關(guān)聯(lián)在了一起,這就是前端路由。

三、history模式

  隨著history api的到來,前端路由開始進化了,前面的onhashchange,你只能改變#后面的url片段,而history api則給了前端完全的自由。

  history api可以分為兩大部分,切換和修改。

  切換歷史狀態(tài)包括back、forward、go三個方法,對應(yīng)瀏覽器的前進,后退,跳轉(zhuǎn)操作。

  修改歷史狀態(tài)包括了pushState、replaceState兩個方法,這兩個方法接收三個參數(shù):stateObj,title,url

history.pushState({color:'red'}, 'red', 'red')
history.back();
setTimeout(function(){
 history.forward();
 },0)
window.onpopstate = function(event){
  console.log(event.state)
  if(event.state && event.state.color === 'red'){
   document.body.style.color = 'red';
  }
}

  通過pushstate把頁面的狀態(tài)保存在state對象中,當(dāng)頁面的url再變回這個url時,可以通過event.state取到這個state對象,從而可以對頁面狀態(tài)進行還原,這里的頁面狀態(tài)就是頁面字體顏色。

  其實滾動條的位置,閱讀進度,組件的開關(guān)的這些頁面狀態(tài)都可以存儲到state的里面。

四、history模式的問題

  通過history api,我們丟掉了丑陋的#,但是它也有個問題:不怕前進,不怕后退,就怕刷新,f5,(如果后端沒有準備的話),因為刷新是實實在在地去請求服務(wù)器的。

  在hash模式下,前端路由修改的是#中的信息,而瀏覽器請求時是不帶它的,所以沒有問題。但是在history下,你可以自由的修改path,當(dāng)刷新時,如果服務(wù)器中沒有相應(yīng)的響應(yīng)或者資源,會刷出一個404來。

  所以呢,你要在服務(wù)端增加一個覆蓋所有情況的候選資源:如果 URL 匹配不到任何靜態(tài)資源,則應(yīng)該返回同一個 index.html 頁面,這個頁面就是你 app 依賴的頁面。

  如果使用nginx,后端配置如下:

location / {
 try_files $uri $uri/ /index.html;
}

以上就是區(qū)分vue-router的hash和history模式的詳細內(nèi)容,更多關(guān)于vue-router hash和history模式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue中computed與methods的區(qū)別詳解

    Vue中computed與methods的區(qū)別詳解

    這篇文章主要介紹了Vue中computed與methods的區(qū)別詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • VUE+elementui面包屑實現(xiàn)動態(tài)路由詳解

    VUE+elementui面包屑實現(xiàn)動態(tài)路由詳解

    今天小編就為大家分享一篇VUE+elementui面包屑實現(xiàn)動態(tài)路由詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 關(guān)于vue中使用three.js報錯的解決方法

    關(guān)于vue中使用three.js報錯的解決方法

    最近因為three.js的項目要用Vue.js,下面這篇文章主要給大家介紹了關(guān)于vue中使用three.js報錯的解決方法,文中通過圖文以及示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • vue+three.js實現(xiàn)炫酷的3D登陸頁面示例詳解

    vue+three.js實現(xiàn)炫酷的3D登陸頁面示例詳解

    這篇文章主要為大家介紹了vue+three.js實現(xiàn)炫酷的3D登陸頁面示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Vue中的項目打包及部署全流程

    Vue中的項目打包及部署全流程

    這篇文章主要介紹了Vue中的項目打包及部署全流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue.js 實現(xiàn)微信公眾號菜單編輯器功能(一)

    Vue.js 實現(xiàn)微信公眾號菜單編輯器功能(一)

    最近vue.js 非?;馃?,小編也趁機學(xué)習(xí)了下vuejs的一些基礎(chǔ)知識,于是嘗試做一個像微信平臺里的菜單編輯器功能,下面腳本之家小編把vue.js 微信公眾號菜單編輯器功能的實現(xiàn)代碼分享給大家,需要的朋友參考下
    2018-05-05
  • vue-week-picker實現(xiàn)支持按周切換的日歷

    vue-week-picker實現(xiàn)支持按周切換的日歷

    這篇文章主要為大家詳細介紹了vue-week-picker實現(xiàn)支持按周切換的日歷,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Electron+vue從零開始打造一個本地播放器的方法示例

    Electron+vue從零開始打造一個本地播放器的方法示例

    這篇文章主要介紹了Electron+vue從零開始打造一個本地播放器的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • vue中element-ui不能修改el-input框,或是不能修改某些值問題

    vue中element-ui不能修改el-input框,或是不能修改某些值問題

    這篇文章主要介紹了vue中element-ui不能修改el-input框,或是不能修改某些值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 老生常談Vue中的偵聽器watch

    老生常談Vue中的偵聽器watch

    開發(fā)中我們在data返回的對象中定義了數(shù)據(jù),這個數(shù)據(jù)通過插值語法等方式綁定到template中,這篇文章主要介紹了Vue中的偵聽器watch,需要的朋友可以參考下
    2022-10-10

最新評論

信阳市| 卢湾区| 蓬溪县| 长顺县| 潜山县| 凭祥市| 奉节县| 万山特区| 林西县| 平阳县| 海门市| 淮北市| 望江县| 东乌珠穆沁旗| 襄垣县| 张家口市| 凤山市| 乃东县| 龙里县| 茶陵县| 盐源县| 泌阳县| 江阴市| 中阳县| 石林| 额尔古纳市| 贵港市| 蓝田县| 陆良县| 利津县| 罗城| 本溪市| 雷山县| 永新县| 高尔夫| 会泽县| 卢湾区| 淳化县| 调兵山市| 镇安县| 永济市|