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

Vue3中導(dǎo)航守衛(wèi)的基本使用方法

 更新時間:2023年03月09日 09:47:25   作者:清風(fēng)?與我  
這篇文章主要給大家介紹了關(guān)于Vue3中導(dǎo)航守衛(wèi)的基本使用方法,正如其名vue-router?提供的導(dǎo)航守衛(wèi)主要用來通過跳轉(zhuǎn)或取消的方式守衛(wèi)導(dǎo)航,下面需要的朋友可以參考下

前言:

在編寫vue里的登錄注冊時,我們始終繞不開對導(dǎo)航守衛(wèi)的使用,vue-router4.0版里有一些重要更新,在這里分享給大家。

一、什么是導(dǎo)航守衛(wèi)?

正如其名,vue-router 提供的導(dǎo)航守衛(wèi)主要用來通過跳轉(zhuǎn)或取消的方式守衛(wèi)導(dǎo)航。這里有很多方式植入路由導(dǎo)航中:全局的,單個路由獨(dú)享的,或者組件級的。

查看以下情形:

點(diǎn)擊主頁鏈接時,默認(rèn)情況下可直接進(jìn)入指定界面,如圖,但是問題是該跳轉(zhuǎn)的界面是需要用戶登錄后方可訪問的

未處理登錄跳轉(zhuǎn)主頁

可設(shè)置導(dǎo)航守衛(wèi)來檢測用戶是否登錄,如果已登錄,則進(jìn)入后臺頁,如果未登錄,則強(qiáng)制進(jìn)入登錄頁,如圖

導(dǎo)航守衛(wèi)來檢測是否登錄

二、導(dǎo)航守衛(wèi)有哪幾種?

1、全局守衛(wèi)(3個)

全局前置守衛(wèi)

每次發(fā)生路由的導(dǎo)航跳轉(zhuǎn)時,都會觸發(fā)全局前置守衛(wèi),因此,在全局前置守衛(wèi)中,程序員可以對每個路由進(jìn)行訪問權(quán)限的控制

1、 使用方式

你可以在 router/index.js 頁面中使用 router.beforeEach((to, from, next) => {}) 注冊一個全局前置守衛(wèi)。

2、 代碼:

// router/index.js 頁面

router.beforeEach((to, from, next) => {
    console.log(to, from);
    next()
});

全局解析守衛(wèi)

1、 使用方式
你可以用 router.beforeResolve 注冊一個全局守衛(wèi)。這和 router.beforeEach 類似,因?yàn)樗?每次導(dǎo)航時都會觸發(fā),但是確保在導(dǎo)航被確認(rèn)之前,同時在所有組件內(nèi)守衛(wèi)和異步路由組件被解析之后,解析守衛(wèi)就被正確調(diào)用。

2、 代碼:

// router/index.js 頁面

router.beforeResolve((to, from, next) => {
    console.log(to,from);
    next()
})

全局后置鉤子

1、 使用方式
你也可以注冊全局后置鉤子,然而和守衛(wèi)不同的是,這些鉤子不會接受 next 函數(shù)也不會改變導(dǎo)航本身:

2、 代碼:

// router/index.js 頁面

router.afterEach((to, from) => {
    console.log(to,from);
})

它們對于分析、更改頁面標(biāo)題、聲明頁面等輔助功能以及許多其他事情都很有用。

2、路由獨(dú)享守衛(wèi)(1個)

1、 使用方式

你可以直接在路由配置上定義 beforeEnter 守衛(wèi):

2、 代碼:

// router/index.js 頁面(路由規(guī)則中)

const routes = [
	{
	    path: '/home',
	    name: 'Home',
	    component: HomeView,
	    beforeEnter: (to, from,next) => {
	        console.log(to, from);
	        next()
	    },
	}, 
]

3、組件內(nèi)守衛(wèi)(3個)

組件內(nèi)守衛(wèi)有個三個:路由進(jìn)入之前beforeRouteEnter,路由離開時beforeRouteLeave,頁面更新時beforeRouteUpdate

beforeRouteEnter(to, from, next)

1、 使用方式
在組件模板中使用,跟methods: {}等同級別書寫,組件路由守衛(wèi)是寫在每個單獨(dú)的vue文件里面的路由守衛(wèi)

2、 代碼:

// vue 組件內(nèi)使用

onBeforeRouteUpdate((to, from) => {
  //當(dāng)前組件路由改變后,進(jìn)行觸發(fā)
  console.log(to);
});
注意:在 vue3 中的 setup 函數(shù)中是不可以使用 beforeRouterEnter 這個路由守衛(wèi)的

beforeRouteUpdate(to, from, next)

1、 使用方式
在組件模板中使用,跟 methods: {} 等同級別書寫,組件路由守衛(wèi)是寫在每個單獨(dú)的 vue 文件里面的路由守衛(wèi)

2、 代碼:

// vue 組件內(nèi)使用

onBeforeRouteUpdate((to, from) => {
  //當(dāng)前組件路由改變后,進(jìn)行觸發(fā)
  console.log(to);
});

beforeRouteLeave(to, from, next)

1、 使用方式 在組件模板中使用, 跟methods: {} 等同級別書寫,組件路由守衛(wèi)是寫在每個單獨(dú)的 vue 文件里面的路由守衛(wèi)

2、 代碼:

// vue 組件內(nèi)使用

onBeforeRouteLeave((to, from) => {
  //離開當(dāng)前的組件,觸發(fā)
  alert("我離開啦");
});

三、導(dǎo)航守衛(wèi)的三個參數(shù)

  • to:將要訪問的路由信息對象
  • from:將要離開的路由信息對象
  • next:函數(shù)

    調(diào)用next()表示放行,允許這次路由導(dǎo)航

    調(diào)用next(false)表示不放行,不允許此次路由導(dǎo)航

    調(diào)用next({routerPath})表示導(dǎo)航到此地址,一般情況用戶未登錄時,會導(dǎo)航到登陸界面

提示:該函數(shù)在導(dǎo)航守衛(wèi)中可出現(xiàn)多次,但是只能被調(diào)用一次!!!

四、如何在 vue3 中使用 beforeRouteEnter

如果你正在使用組合 API 和 setup 函數(shù)來編寫組件,你可以通過 onBeforeRouteUpdate 和 onBeforeRouteLeave 分別添加 update 和 leave 守衛(wèi)。 請參考組合 API 部分以獲得更多細(xì)節(jié)。

具體請看vue-router的官方文檔
導(dǎo)航守衛(wèi) | Vue Router

方法一、我們可以在設(shè)置路由的時候,使用beforeEnter方法攔截,即在router.js中:

{
	path: '/',
	name: 'home
	component: () => import('@/xxx.vue'),
	beforeEnter: (to, from) => {
		// 可以在定義路由的時候監(jiān)聽from和to
	}
}

方法二、我們還可以使用vue2的寫法,使用選項(xiàng)式api,就可以使用beforeRouterEnter這個鉤子了

<script>
export default {
	beforeRouteEnter(to, from) {
		console.log('before router enter', to, from)
	},
	mounted() {
		console.log('mounted')
	},
}

五、模擬登錄注冊案例

// 模擬是否登錄(true為登錄,false為未登錄)
let token = true
router.beforeEach((to, from, next) => {
    // 判斷有沒有登錄
    if (!token) {
    	// 如果沒有登錄,并且是跳轉(zhuǎn)至登錄頁
        if (to.name == "Login") {
        	// 直接跳轉(zhuǎn)
            next();
        } else {
        	// 否則直接強(qiáng)制跳轉(zhuǎn)至登錄頁
            router.push('/login')
        }
    } else {
    	// 如果已經(jīng)登錄,并且不是跳轉(zhuǎn)至登錄頁
        if (to.name !== "Login") {
        	// 直接跳轉(zhuǎn)
            next();
        } else {
        	// 否則直接強(qiáng)制跳轉(zhuǎn)至上一個頁面
            router.push(from.path)
        }
    }
});

總結(jié):

到此這篇關(guān)于Vue3中導(dǎo)航守衛(wèi)的基本使用方法的文章就介紹到這了,更多相關(guān)Vue3導(dǎo)航守衛(wèi)使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue-openlayers實(shí)現(xiàn)地圖坐標(biāo)彈框效果

    vue-openlayers實(shí)現(xiàn)地圖坐標(biāo)彈框效果

    這篇文章主要為大家詳細(xì)介紹了vue-openlayers實(shí)現(xiàn)地圖坐標(biāo)彈框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 詳解處理Vue單頁面應(yīng)用SEO的另一種思路

    詳解處理Vue單頁面應(yīng)用SEO的另一種思路

    這篇文章主要介紹了詳解處理Vue單頁面應(yīng)用SEO的另一種思路,本文主要針對 vue 2.0 單頁面 Meta SEO 優(yōu)化展開介紹,非常具有實(shí)用價值,需要的朋友可以參考下
    2018-11-11
  • vue3-組合式api-provide/inject詳解

    vue3-組合式api-provide/inject詳解

    provide/inject 適用于跨級通信,在孫組件中通過依賴注入的方式能獲取到父組件中改變的這個值,下面通過實(shí)例代碼介紹vue3-組合式api-provide/inject的相關(guān)知識,需要的朋友可以參考下
    2022-11-11
  • ant?design?vue的table取消自帶分頁問題

    ant?design?vue的table取消自帶分頁問題

    這篇文章主要介紹了ant?design?vue的table取消自帶分頁問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 如何使用?vxe-table?將行數(shù)據(jù)標(biāo)記為刪除狀態(tài)

    如何使用?vxe-table?將行數(shù)據(jù)標(biāo)記為刪除狀態(tài)

    vxe-table支持將數(shù)據(jù)標(biāo)記為待刪除狀態(tài),通過調(diào)用setPendingRow方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • vue使用WebSocket模擬實(shí)現(xiàn)聊天功能

    vue使用WebSocket模擬實(shí)現(xiàn)聊天功能

    這篇文章主要介紹了vue使用WebSocket模擬實(shí)現(xiàn)聊天功能,通過創(chuàng)建node服務(wù)和server.js文件實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • 詳解vuejs之v-for列表渲染

    詳解vuejs之v-for列表渲染

    這篇文章主要介紹了詳解vuejs之v-for列表渲染,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • vue2與vue3中生命周期執(zhí)行順序的區(qū)別說明

    vue2與vue3中生命周期執(zhí)行順序的區(qū)別說明

    這篇文章主要介紹了vue2與vue3中生命周期執(zhí)行順序的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 淺談mint-ui loadmore組件注意的問題

    淺談mint-ui loadmore組件注意的問題

    下面小編就為大家?guī)硪黄獪\談mint-ui loadmore組件注意的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • idea部署RuoYi-Vue分離版的圖文詳解

    idea部署RuoYi-Vue分離版的圖文詳解

    RuoYi-Vue是一款基于SpringBoot+Vue的前后端分離極速后臺開發(fā)框架, 本文主要介紹了idea部署RuoYi-Vue分離版的圖文詳解,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06

最新評論

鸡泽县| 兴安县| 鹤山市| 湟源县| 罗定市| 石家庄市| 福贡县| 新建县| 安远县| 平潭县| 新昌县| 镇沅| 军事| 冷水江市| 新营市| 宜州市| 台江县| 台东市| 义乌市| 沙湾县| 翁牛特旗| 巴楚县| 肃宁县| 台湾省| 河北区| 昭苏县| 翼城县| 咸丰县| 金华市| 南华县| 京山县| 宁城县| 繁峙县| 临朐县| 闽侯县| 南召县| 黔南| 诏安县| 柘荣县| 玛曲县| 垦利县|