亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

vue-router路由模式詳解(小結)

2019-11-19 10:57:42
字體:
來源:轉載
供稿:網友

一、路由模式解析

要講vue-router的路由模式,首先要了解的一點就是路由是由多個URL組成的,使用不同的URL可以相應的導航到不同的位置。

如果有進行過服務器開發或者對http協議有所了解就會知道,瀏覽器中對頁面的訪問是無狀態的,所以我們在切換不同的頁面時都會重新進行請求。而實際使用vue和vue-router開發就會明白,在切換頁面時是沒有重新進行請求的,使用起來就好像頁面是有狀態的,這是什么原因呢。

這其實是借助了瀏覽器的History API來實現的,這樣可以使得頁面跳轉而不刷新,頁面的狀態就被維持在瀏覽器中了。

vue-router中默認使用的是hash模式,也就是會出現如下的URL:,URL中帶有#號

我們可以用如下代碼修改成history模式:

import Vue from 'vue'import Router from 'vue-router'import Main from '@/components/Main'Vue.use(Router)export default new Router({ mode: 'history', routes: [ {  path: '/',  component: Main } ]})

這樣子URL中的#號就被去除了。

實際上存在三種模式:

Hash: 使用URL的hash值來作為路由。支持所有瀏覽器。

History: 以來HTML5 History API 和服務器配置。參考官網中HTML5 History模式

Abstract: 支持所有javascript運行模式。如果發現沒有瀏覽器的API,路由會自動強制進入這個模式。

二、兩種模式的區別

1、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一一關聯起來,后來人們給它起了一個霸氣的名字叫前端路由,成為了單頁應用標配。

我們寫個簡單的方法來測試一下

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <div>測試一下</div> <script type="text/javascript">  window.onhashchange = function(event){   console.log(event.oldURL,event.newURL)   let hash = location.hash.slice(1);   document.body.style.color = hash;  } </script></body></html>

并且通過瀏覽器的前進、后退頁面均可以變化。

網易云音樂,百度網盤就采用了hash路由,看起來就是這個樣子:

http://music.163.com/#/friend
https://pan.baidu.com/disk/home#list/vmode=list

 2、history路由

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

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

(1)切換歷史狀態

包括back、forward、go三個方法,對應瀏覽器的前進,后退,跳轉操作,有同學說了,(谷歌)瀏覽器只有前進和后退,沒有跳轉,嗯,在前進后退上長按鼠標,會出來所有當前窗口的歷史記錄,從而可以跳轉(也許叫跳更合適):

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

(2)修改歷史狀態

包括了pushState、replaceState兩個方法,這兩個方法接收三個參數:stateObj,title,url

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

通過pushstate把頁面的狀態保存在state對象中,當頁面的url再變回這個url時,可以通過event.state取到這個state對象,從而可以對頁面狀態進行還原,這里的頁面狀態就是頁面字體顏色,其實滾動條的位置,閱讀進度,組件的開關的這些頁面狀態都可以存儲到state的里面。

通過history api,我們丟掉了丑陋的#,但是它也有個毛病:

不怕前進,不怕后退,就怕刷新,f5,(如果后端沒有準備的話),因為刷新是實實在在地去請求服務器的。

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

(3)popstate實現history路由攔截,監聽頁面返回事件

當活動歷史記錄條目更改時,將觸發popstate事件。

1、如果被激活的歷史記錄條目是通過對 history.pushState() 的調用創建的,或者受到對 history.replaceState() 的調用的影響,popstate事件的state屬性包含歷史條目的狀態對象的副本。

2、需要注意的是調用 history.pushState() 或 history.replaceState() 用來在瀏覽歷史中添加或修改記錄,不會觸發popstate事件;

只有在做出瀏覽器動作時,才會觸發該事件,如用戶點擊瀏覽器的回退按鈕(或者在Javascript代碼中調用history.back())

我們測試一下:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <div>測試一下</div> <script type="text/javascript">  if (window.history && window.history.pushState) {   window.onpopstate = function(event) {    console.log("location: " + document.location + ", state: " + JSON.stringify(event.state));    //window.history.go(1)    //window.history.back()   };      //window.addEventListener("popstate", function(e) {   // window.location = 'http://www.baidu.com';   //}, false);      !function() {    var state = {     title: "title",     url: "#"    };    window.history.pushState(state, "title", "#");   }();  } </script></body></html>

刷新時不打印,刷新多次,再后退,每次都有,直到為null

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩成人av网| 日韩精品在线观看网站| 日韩高清av一区二区三区| 亚洲午夜国产成人av电影男同| 国产精品欧美一区二区| 日韩视频免费中文字幕| 91沈先生作品| 91精品国产乱码久久久久久久久| 国产亚洲美女精品久久久| 成人中心免费视频| 久久久91精品| 91国内免费在线视频| 欧美俄罗斯乱妇| 国模叶桐国产精品一区| 亚洲电影免费观看| 久久久人成影片一区二区三区观看| 国产精品美女无圣光视频| 亚洲一区二区免费在线| 国产欧美一区二区三区久久人妖| 欧美视频一二三| 91视频国产精品| 国产午夜精品一区理论片飘花| 91精品国产综合久久久久久久久| 色偷偷偷亚洲综合网另类| 欧亚精品在线观看| 国产亚洲xxx| 国产精品白丝jk喷水视频一区| 91亚洲国产精品| 日韩中文字幕免费| 国产欧美在线观看| 不卡av电影在线观看| 亚洲男人天堂2019| 97免费中文视频在线观看| 大伊人狠狠躁夜夜躁av一区| 亚洲一区二区三区sesese| 欧美在线国产精品| 91精品久久久久久久久久久| 久久福利视频网| 国产精品色视频| 插插插亚洲综合网| 国产91色在线免费| 日本电影亚洲天堂| 久久精品视频在线播放| 色诱女教师一区二区三区| 久久免费视频在线| 久久精品久久久久久国产 免费| 欧美视频在线免费看| 欧美在线观看www| 91国偷自产一区二区三区的观看方式| 精品人伦一区二区三区蜜桃免费| 国产日韩在线免费| 成人写真福利网| 国产精品视频专区| 日韩在线欧美在线国产在线| 日韩专区在线观看| 欧美视频一区二区三区…| 国产精品av电影| 91精品久久久久久久久不口人| 精品国产区一区二区三区在线观看| 欧美孕妇性xx| 亚洲一区免费网站| 国产精品99久久久久久人| 亚洲一区二区久久久| 中文字幕日韩欧美精品在线观看| 中文字幕免费精品一区高清| 国产精品国产三级国产aⅴ浪潮| 亚洲深夜福利在线| 亚洲性视频网址| 亚洲欧美另类在线观看| 日韩网站免费观看| 欧美亚洲激情在线| 成人夜晚看av| 国模视频一区二区三区| 欧美日韩第一页| 91国在线精品国内播放| 在线视频欧美日韩| 欧美成人在线影院| 91av国产在线| 中文字幕一精品亚洲无线一区| 中文字幕亚洲图片| 91精品国产色综合久久不卡98| 亚洲理论片在线观看| 久久97久久97精品免视看| 91在线网站视频| 国产精品久久久久久亚洲影视| 国产一区深夜福利| 国产在线98福利播放视频| 欧美在线精品免播放器视频| 久久久在线观看| 欧美电影免费观看高清完整| 成人国产精品一区二区| 国产精品美女久久久久久免费| 成人欧美在线视频| 欧美专区在线观看| 高潮白浆女日韩av免费看| 亚洲xxxxx性| 秋霞午夜一区二区| 91久久久久久久久久久| 亚洲第一网站免费视频| 免费99精品国产自在在线| 在线观看欧美成人| 日韩精品中文字幕视频在线| 欧美肥臀大乳一区二区免费视频| 日本精品久久久久久久| 欧美裸身视频免费观看| 午夜精品久久久久久久男人的天堂| 亚洲自拍另类欧美丝袜| 国产精品成人一区二区三区吃奶| 92看片淫黄大片看国产片| 92福利视频午夜1000合集在线观看| 欧美午夜影院在线视频| 色爱av美腿丝袜综合粉嫩av| 欧美裸体男粗大视频在线观看| 欧美成人午夜激情视频| 中文字幕久热精品在线视频| 91精品国产99| 欧美黑人巨大精品一区二区| 国产精品丝袜久久久久久高清| 亚洲电影免费在线观看| 久久久999精品免费| 国产男女猛烈无遮挡91| 日韩欧美精品网址| 青草成人免费视频| 亚洲黄色成人网| 久久久久亚洲精品| 奇米四色中文综合久久| 高跟丝袜一区二区三区| 亚洲国产精品成人精品| 日韩欧美亚洲综合| 日韩视频免费在线观看| 国产精品电影久久久久电影网| 久久色精品视频| 亚洲欧美日韩中文在线| 国产精品欧美风情| 亚洲色图偷窥自拍| 亚洲直播在线一区| 粗暴蹂躏中文一区二区三区| 欧美大片欧美激情性色a∨久久| 日本高清不卡的在线| 日韩在线国产精品| 一区二区三区四区在线观看视频| 亚洲国产精品专区久久| 亚洲欧美日韩精品| 91丝袜美腿美女视频网站| 亚洲午夜小视频| 亚洲品质视频自拍网| 国产日韩av在线播放| 高清欧美电影在线| 日韩在线观看av| 最近2019中文免费高清视频观看www99| 日本久久精品视频| 国产精品久久久久91| 欧美亚洲日本网站| 午夜欧美大片免费观看| 久久视频在线观看免费| 国产精品久久国产精品99gif| 国产一区二区三区毛片| 欧美福利视频在线| 欧美中文字幕视频在线观看| 日韩黄色av网站| 国产精品最新在线观看| 国产69精品久久久久99| 亚洲人成电影网站色xx| 日本欧美在线视频|