vue項(xiàng)目總結(jié)(2)vue-router(為做登錄攔截準(zhǔn)備)

我們開始就采用了前后端分離的開發(fā)模式鸯乃;話說vue不兼容IE8剖张;不扯太多派阱;總結(jié)一下前端在control層面做的控制诬留;也就是路由的跳轉(zhuǎn)部分;這樣才能再深一步的開發(fā)

了解一下前端路由 在說到登錄攔截的時(shí)候必須要結(jié)合路由使用的

前端路由

1. hash 模式

隨著 ajax 的流行贫母,異步數(shù)據(jù)請(qǐng)求交互運(yùn)行在不刷新瀏覽器的情況下進(jìn)行文兑。而異步交互體驗(yàn)的更高級(jí)版本就是 SPA —— 單頁應(yīng)用。單頁應(yīng)用不僅僅是在頁面交互是無刷新的腺劣,連頁面跳轉(zhuǎn)都是無刷新的绿贞,為了實(shí)現(xiàn)單頁應(yīng)用,所以就有了前端路由橘原。 類似于服務(wù)端路由籍铁,前端路由實(shí)現(xiàn)起來其實(shí)也很簡(jiǎn)單,就是匹配不同的 url 路徑趾断,進(jìn)行解析拒名,然后動(dòng)態(tài)的渲染出區(qū)域 html 內(nèi)容。但是這樣存在一個(gè)問題芋酌,就是 url 每次變化的時(shí)候靡狞,都會(huì)造成頁面的刷新。那解決問題的思路便是在改變 url 的情況下隔嫡,保證頁面的不刷新。在 2014 年之前甘穿,大家是通過 hash 來實(shí)現(xiàn)路由腮恩,url hash 就是類似于:

http://www.xxx.com/#/login

這種 #。后面 hash 值的變化温兼,并不會(huì)導(dǎo)致瀏覽器向服務(wù)器發(fā)出請(qǐng)求秸滴,瀏覽器不發(fā)出請(qǐng)求,也就不會(huì)刷新頁面募判。另外每次 hash 值的變化荡含,還會(huì)觸發(fā) hashchange 這個(gè)事件咒唆,通過這個(gè)事件我們就可以知道 hash 值發(fā)生了哪些變化。然后我們便可以監(jiān)聽 hashchange 來實(shí)現(xiàn)更新頁面部分內(nèi)容的操作:

function matchAndUpdate () {
// todo 匹配 hash 做 dom 更新操作
}
window.addEventListener('hashchange', matchAndUpdate)

2. history 模式

14年后释液,因?yàn)镠TML5標(biāo)準(zhǔn)發(fā)布全释。多了兩個(gè) API, pushState 和 replaceState 误债,通過這兩個(gè) API 可以改變 url 地址且不會(huì)發(fā)送請(qǐng)求浸船。同時(shí)還有 popstate 事件。通過這些就能用另一種方式來實(shí)現(xiàn)前端路由了寝蹈,但原理都是跟 hash 實(shí)現(xiàn)相同的李命。用了 HTML5 的實(shí)現(xiàn),單頁路由的 url 就不會(huì)多出一個(gè)#箫老,變得更加美觀封字。但因?yàn)闆]有 # 號(hào),所以當(dāng)用戶刷新頁面之類的操作時(shí)耍鬓,瀏覽器還是會(huì)給服務(wù)器發(fā)送請(qǐng)求阔籽。為了避免出現(xiàn)這種情況,所以這個(gè)實(shí)現(xiàn)需要服務(wù)器的支持界斜,需要把所有路由都重定向到根頁面仿耽。
function matchAndUpdate () {
// todo 匹配路徑 做 dom 更新操作
}
window.addEventListener('popstate', matchAndUpdate)

vue-router的基礎(chǔ)知識(shí);

看完上面的內(nèi)容以后各薇;大家也能理解vue-router這個(gè)基本實(shí)現(xiàn)原理就是指定DOM元素的顯示隱藏项贺;通過監(jiān)控url的變化;通過方法展示指定的DOM

下面咱們簡(jiǎn)單的了解一下相關(guān)的知識(shí)內(nèi)容:想要詳細(xì)了解的可以去官方峭判;下面的內(nèi)容也是在官網(wǎng)拿來的开缎;如果不想移步可以繼續(xù)往下看;我寫在這個(gè)里面的就是必須要了解的基礎(chǔ)知識(shí)林螃;
https://router.vuejs.org/zh/ 地址奕删;
接下來咱們簡(jiǎn)單的了解一下vue-router;提供的一下鉤子疗认;

完整的導(dǎo)航解析流程

導(dǎo)航被觸發(fā)完残。
在失活的組件里調(diào)用離開守衛(wèi)。
調(diào)用全局的 beforeEach 守衛(wèi)横漏。
在重用的組件里調(diào)用 beforeRouteUpdate 守衛(wèi) (2.2+)谨设。
在路由配置里調(diào)用 beforeEnter。
解析異步路由組件缎浇。
在被激活的組件里調(diào)用 beforeRouteEnter扎拣。
調(diào)用全局的 beforeResolve 守衛(wèi) (2.5+)。
導(dǎo)航被確認(rèn)。
調(diào)用全局的 afterEach 鉤子二蓝。
觸發(fā) DOM 更新誉券。
用創(chuàng)建好的實(shí)例調(diào)用 beforeRouteEnter 守衛(wèi)中傳給 next 的回調(diào)函數(shù)。

全局守衛(wèi)

你可以使用 router.beforeEach 注冊(cè)一個(gè)全局前置守衛(wèi):

const router = new VueRouter({ ... })

router.beforeEach((to, from, next) => {
  // ...
})

當(dāng)一個(gè)導(dǎo)航觸發(fā)時(shí)刊愚,全局前置守衛(wèi)按照創(chuàng)建順序調(diào)用踊跟。守衛(wèi)是異步解析執(zhí)行,此時(shí)導(dǎo)航在所有守衛(wèi) resolve 完之前一直處于 等待中百拓。

每個(gè)守衛(wèi)方法接收三個(gè)參數(shù):

  • to: Route: 即將要進(jìn)入的目標(biāo) 路由對(duì)象

  • from: Route: 當(dāng)前導(dǎo)航正要離開的路由

  • next: Function: 一定要調(diào)用該方法來 resolve 這個(gè)鉤子琴锭。執(zhí)行效果依賴 next 方法的調(diào)用參數(shù)。

    • next(): 進(jìn)行管道中的下一個(gè)鉤子衙传。如果全部鉤子執(zhí)行完了决帖,則導(dǎo)航的狀態(tài)就是 confirmed (確認(rèn)的)。

    • next(false): 中斷當(dāng)前的導(dǎo)航蓖捶。如果瀏覽器的 URL 改變了 (可能是用戶手動(dòng)或者瀏覽器后退按鈕)地回,那么 URL 地址會(huì)重置到 from 路由對(duì)應(yīng)的地址。

    • next('/') 或者 next({ path: '/' }): 跳轉(zhuǎn)到一個(gè)不同的地址俊鱼。當(dāng)前的導(dǎo)航被中斷刻像,然后進(jìn)行一個(gè)新的導(dǎo)航。你可以向 next 傳遞任意位置對(duì)象并闲,且允許設(shè)置諸如 replace: true细睡、name: 'home' 之類的選項(xiàng)以及任何用在 router-linkto proprouter.push 中的選項(xiàng)。

    • next(error): (2.4.0+) 如果傳入 next 的參數(shù)是一個(gè) Error 實(shí)例帝火,則導(dǎo)航會(huì)被終止且該錯(cuò)誤會(huì)被傳遞給 router.onError() 注冊(cè)過的回調(diào)溜徙。

確保要調(diào)用 next 方法,否則鉤子就不會(huì)被 resolved

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末犀填,一起剝皮案震驚了整個(gè)濱河市蠢壹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌九巡,老刑警劉巖图贸,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異冕广,居然都是意外死亡疏日,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門撒汉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來制恍,“玉大人,你說我怎么就攤上這事神凑。” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵溉委,是天一觀的道長鹃唯。 經(jīng)常有香客問我,道長瓣喊,這世上最難降的妖魔是什么坡慌? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮藻三,結(jié)果婚禮上洪橘,老公的妹妹穿的比我還像新娘。我一直安慰自己棵帽,他們只是感情好熄求,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著逗概,像睡著了一般弟晚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逾苫,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天卿城,我揣著相機(jī)與錄音,去河邊找鬼铅搓。 笑死瑟押,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的星掰。 我是一名探鬼主播多望,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蹋偏!你這毒婦竟也來了便斥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤威始,失蹤者是張志新(化名)和其女友劉穎枢纠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黎棠,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晋渺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脓斩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片木西。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖随静,靈堂內(nèi)的尸體忽然破棺而出八千,到底是詐尸還是另有隱情吗讶,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布恋捆,位于F島的核電站照皆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏沸停。R本人自食惡果不足惜膜毁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望愤钾。 院中可真熱鬧瘟滨,春花似錦、人聲如沸能颁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽劲装。三九已至胧沫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間占业,已是汗流浹背绒怨。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谦疾,地道東北人南蹂。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像念恍,于是被迫代替她去往敵國和親六剥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353