91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue-router的hash和history模式怎么區分

發布時間:2020-10-29 20:38:19 來源:億速云 閱讀:260 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關vue-router的hash和history模式怎么區分,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

一、概念

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

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

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

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

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

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

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

二、hash模式

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

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

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

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

  這樣一來雖然沒有向后端發送請求,但是頁面狀態和url關聯在了一起,這就是前端路由。

三、history模式

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

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

  切換歷史狀態包括back、forward、go三個方法,對應瀏覽器的前進,后退,跳轉操作。

  修改歷史狀態包括了pushState、replaceState兩個方法,這兩個方法接收三個參數: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把頁面的狀態保存在state對象中,當頁面的url再變回這個url時,可以通過event.state取到這個state對象,從而可以對頁面狀態進行還原,這里的頁面狀態就是頁面字體顏色。

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

四、history模式的問題

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

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

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

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

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

以上就是vue-router的hash和history模式怎么區分,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新竹市| 高唐县| 漠河县| 富宁县| 于都县| 通渭县| 高雄市| 肃北| 阿勒泰市| 乳山市| 木兰县| 定边县| 宁南县| 宿松县| 伊宁市| 麟游县| 五河县| 铜川市| 杨浦区| 孟村| 商城县| 科技| 海兴县| 肥城市| 资阳市| 嘉义县| 抚松县| 遂昌县| 揭东县| 苍溪县| 文山县| 雷山县| 蒙山县| 开平市| 定安县| 安顺市| 都安| 德格县| 兴山县| 镇江市| 固始县|