vuerouter導(dǎo)航守衛(wèi)(router.beforeEach())的使用詳解

導(dǎo)航守衛(wèi)

目前成都創(chuàng)新互聯(lián)公司已為成百上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、鄯善網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

        導(dǎo)航守衛(wèi)主要用來通過跳轉(zhuǎn)或取消的方式守衛(wèi)導(dǎo)航。有多種機(jī)會(huì)植入路由導(dǎo)航過程中:全局的, 單個(gè)路由獨(dú)享的, 或者組件級(jí)的。(記住參數(shù)或查詢的改變并不會(huì)觸發(fā)進(jìn)入/離開的導(dǎo)航守衛(wèi)。你可以通過觀察$route對(duì)象來應(yīng)對(duì)這些變化,或使用beforeRouteUpdate的組件內(nèi)守衛(wèi)。)

好久沒寫一些東西了,總是感覺有啥缺少的。~~~~恰好碰到最近在寫一個(gè)移動(dòng)端項(xiàng)目,遇到了如何使同一個(gè)鏈接在不同條件下跳轉(zhuǎn)到不同路由組件問題,譬如大家經(jīng)??吹绞謾C(jī)中沒登錄跳轉(zhuǎn)登錄頁,登陸后跳轉(zhuǎn)個(gè)人信息頁等。廢話不多說了,直接上圖:

vue router導(dǎo)航守衛(wèi)(router.beforeEach())的使用詳解

這是沒登錄狀態(tài),點(diǎn)擊下面mine按鈕跳轉(zhuǎn)至登錄頁

vue router導(dǎo)航守衛(wèi)(router.beforeEach())的使用詳解

這個(gè)是我登錄了自己的賬號(hào)后,再次點(diǎn)擊mine按鈕會(huì)跳轉(zhuǎn)至個(gè)人信息頁面

好了,看到了這個(gè)效果今天咱們來實(shí)現(xiàn)下

實(shí)現(xiàn)方法

我們點(diǎn)擊下面mine按鈕其實(shí)是路由跳轉(zhuǎn),所以我們需要在跳轉(zhuǎn)路由之前做一個(gè)判斷,根據(jù)不同的條件讓這個(gè)鏈接跳轉(zhuǎn)到不同路由。這時(shí)候我們vue-router中的導(dǎo)航守衛(wèi)就閃亮登場了~~~

先看官方文檔: https://router.vuejs.org/zh-cn/advanced/navigation-guards.html

vue-router 提供的導(dǎo)航守衛(wèi)主要用來通過跳轉(zhuǎn)或取消的方式守衛(wèi)導(dǎo)航。有多種機(jī)會(huì)植入路由導(dǎo)航過程中:全局的, 單個(gè)路由獨(dú)享的, 或者組件級(jí)的。

官方文檔中說了很清楚,我們可以使用 router.beforeEach 注冊(cè)一個(gè)全局前置守衛(wèi):

在router文件夾下index.js中添加以下代碼

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

vue router導(dǎo)航守衛(wèi)(router.beforeEach())的使用詳解

這里對(duì)router.beforeEach方法的每個(gè)參數(shù)做簡要的解釋。

“to”: 即將要進(jìn)入的目標(biāo) 路由對(duì)象;(這個(gè)對(duì)象中包含name,params,meta等屬性)

"from": 當(dāng)前導(dǎo)航正要離開的路由對(duì)象;(這個(gè)對(duì)象中包含name,params,meta等屬性)

“next”: Function: 確保要調(diào)用 next 方法,否則鉤子就不會(huì)被 resolved。這個(gè)當(dāng)中還可以傳一些參數(shù),具體可以看官方文檔。

我們?cè)诖a中做了一個(gè)判斷 if (to.name === 'Mine') ,也就是說當(dāng)我們要跳轉(zhuǎn)的路由對(duì)象是Mine時(shí)候,才會(huì)進(jìn)入導(dǎo)航守衛(wèi)中判斷條件,當(dāng)我們點(diǎn)擊其他鏈接跳轉(zhuǎn)其他頁正常,因?yàn)槲覀冎挥衜ine按鈕鏈接對(duì)應(yīng)的情況有兩種。

// 登陸/注冊(cè)就去用戶詳情頁
 if (localStorage.getItem('userID')) {
  router.replace('/myinfo')
 }

這段代碼就是判斷當(dāng)用戶點(diǎn)擊了mine,我們需要判斷用戶是否是登錄還是未登錄了。因?yàn)橹坝脩舻卿浀臅r(shí)候我將用戶的userID保存到了localStorage中,所以只需要判斷l(xiāng)ocalStorage中是否有用戶的userID,來判斷用戶是否登錄。這里情況兩個(gè),未登錄去登錄頁,登錄去個(gè)人信息頁

好了,通過簡單的配置使用,我們就可以愉快的根據(jù)不同的情況來實(shí)現(xiàn)路由跳轉(zhuǎn)不同組件了~

哈哈,很簡單吧,歡迎大家一起交流學(xué)習(xí)前端知識(shí)。我在GitHub上等你一起呦
~

說明

文章因?yàn)槭窃诠ぷ髦鄬懙?,可能時(shí)間匆忙,有些錯(cuò)別字或者語法等低級(jí)錯(cuò)誤,歡迎留言指出,謝謝。。

同時(shí)在GitHub上也可以一起交流交流~~~

GitHub 走你

總結(jié)

以上所述是小編給大家介紹的vue router導(dǎo)航守衛(wèi)(router.beforeEach())的使用詳解,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

網(wǎng)站題目:vuerouter導(dǎo)航守衛(wèi)(router.beforeEach())的使用詳解
URL標(biāo)題:http://muchs.cn/article48/pipjhp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、企業(yè)建站定制網(wǎng)站、定制開發(fā)、網(wǎng)頁設(shè)計(jì)公司、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)