vue路由導航守衛(全局守衛、路由獨享守衛、組件內守衛)

目錄

一、什么是Vue路由導航守衛?

二、全局守衛

1、beforeEach

下面是一個beforeEach的示例代碼:

2、beforeResolve

下面是一個beforeResolve的示例代碼:

3、afterEach

下面是一個afterEach的示例代碼:

三、路由獨享守衛

1、beforeEnter

下面是一個beforeEnter的示例代碼:

2、afterEnter

下面是一個afterEnter的示例代碼:

四、組件內守衛

1、beforeRouteEnter

下面是一個beforeRouteEnter的示例代碼:

2、beforeRouteUpdate

下面是一個beforeRouteUpdate的示例代碼:

3、beforeRouteLeave

下面是一個beforeRouteLeave的示例代碼:

五、總結


?

一、什么是Vue路由導航守衛?

Vue路由導航守衛是Vue Router提供的一種機制,它可以讓你在路由跳轉之前或之后執行一些自定義邏輯,例如:鑒權、重定向等。守衛分為全局守衛、路由獨享守衛和組件內守衛。

二、全局守衛

全局守衛作用于所有路由,包括進入路由、離開路由、進入子路由和離開子路由。全局守衛有三個:beforeEach、beforeResolve和afterEach。

1、beforeEach

beforeEach在路由跳轉之前被調用,它接收三個參數:to、from和next。
to:即將進入的路由對象;from:當前導航正要離開的路由對象;next:函數,必須調用next()來resolve鉤子。

下面是一個beforeEach的示例代碼:

router.beforeEach((to, from, next) => {if (to.meta.requiresAuth && !user.isLoggedIn) { // 鑒權next({path: '/login', // 重定向到登錄頁query: {redirect: to.fullPath} // 保存跳轉路徑})} else {next() // 繼續跳轉}
})

上面的代碼中,我們使用了to.meta.requiresAuth來判斷該路由是否需要鑒權,如果需要鑒權且用戶沒有登錄,則將用戶重定向到登錄頁,并通過query參數記錄下用戶原本想要跳轉的路徑。

2、beforeResolve

beforeResolve是在導航被確認之前被調用,它接收一個參數:to。
to:即將進入的目標路由對象。

下面是一個beforeResolve的示例代碼:

router.beforeResolve((to) => {console.log('正在進入', to.name || to.path)
})

上面的代碼中,我們使用了to.name || to.path來獲取路由的名稱或路徑,并在控制臺輸出正在進入的路由名稱或路徑。

3、afterEach

afterEach在路由跳轉之后被調用,它接收兩個參數:to和from。
to:即將進入的路由對象;from:當前導航正要離開的路由對象。

下面是一個afterEach的示例代碼:

router.afterEach((to, from) => {console.log('從', from.name || from.path, '跳轉到', to.name || to.path)
})

上面的代碼中,我們使用了from.name || from.path和to.name || to.path來獲取路由的名稱或路徑,并在控制臺輸出從哪個路由跳轉到哪個路由了。

三、路由獨享守衛

路由獨享守衛作用于單個路由,它們在路由配置中定義。路由獨享守衛有兩個:beforeEnter和afterEnter。

1、beforeEnter

beforeEnter在路由切換前被調用,它接收三個參數:to、from和next。
to:即將進入的路由對象;from:當前導航正要離開的路由對象;next:函數,必須調用next()來resolve鉤子。

下面是一個beforeEnter的示例代碼:

const routes = [{path: '/dashboard',component: Dashboard,beforeEnter: (to, from, next) => {if (user.isAdmin) { // 鑒權next() // 繼續跳轉} else {next('/forbidden') // 跳轉到禁止訪問頁}}}
]

上面的代碼中,我們使用了user.isAdmin來判斷用戶是否是管理員,如果是管理員則可以訪問/dashboard路由,否則跳轉到/forbidden路由。

2、afterEnter

afterEnter在路由切換后被調用,它接收一個參數:to。
to:即將進入的目標路由對象。

下面是一個afterEnter的示例代碼:

const routes = [{path: '/dashboard',component: Dashboard,afterEnter: (to) => {console.log(to.name || to.path, '已進入')}}
]

上面的代碼中,我們使用了to.name || to.path來獲取路由的名稱或路徑,并在控制臺輸出已進入該路由。

四、組件內守衛

組件內守衛作用于單個組件,它們與全局守衛和路由獨享守衛不同的是,它們不需要在路由配置中定義,而是在組件內定義。

1、beforeRouteEnter

beforeRouteEnter在路由進入組件前被調用,它接收三個參數:to、from和next。
to:即將進入的路由對象;from:當前導航正要離開的路由對象;next:函數,必須調用next()來resolve鉤子。

下面是一個beforeRouteEnter的示例代碼:

export default {beforeRouteEnter(to, from, next) {if (user.hasPermission) { // 鑒權next() // 繼續進入該組件} else {next(false) // 禁止進入該組件}}
}

上面的代碼中,我們使用了user.hasPermission來判斷用戶是否有權限進入該組件,如果有權限則進入該組件,否則禁止進入該組件。

2、beforeRouteUpdate

beforeRouteUpdate在路由進入組件后,組件復用時被調用,它接收兩個參數:to和from。
to:即將進入的路由對象;from:當前導航正要離開的路由對象。

下面是一個beforeRouteUpdate的示例代碼:

export default {beforeRouteUpdate(to, from) {console.log('從', from.name || from.path, '到', to.name || to.path)}
}

上面的代碼中,我們使用了from.name || from.path和to.name || to.path來獲取路由的名稱或路徑,并在控制臺輸出從哪個路由跳轉到哪個路由了。

3、beforeRouteLeave

beforeRouteLeave在路由離開組件時被調用,它接收兩個參數:to和from和next。
to:即將進入的路由對象;from:當前導航正要離開的路由對象;next:函數,必須調用next()來resolve鉤子。

下面是一個beforeRouteLeave的示例代碼:

export default {beforeRouteLeave(to, from, next) {if (shouldLeave) { // 確認是否離開next() // 繼續離開} else {next(false) // 禁止離開}}
}

上面的代碼中,我們使用了shouldLeave來判斷用戶是否要離開該組件,如果要離開則繼續離開,否則禁止離開。

五、總結

Vue路由導航守衛是Vue Router提供的一種機制,可以讓你在路由跳轉之前或之后執行一些自定義邏輯,例如:鑒權、重定向等。守衛分為全局守衛、路由獨享守衛和組件內守衛,每種守衛都有自己的使用場景。在使用守衛時,需要注意它們的執行順序和next函數的使用,避免出現無限循環的情況。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208952.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208952.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208952.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Shell - 學習筆記 - 1.14 - 如何編寫自己的Shell配置文件(配置腳本)?

第1章 Shell基礎(開胃菜) 14 - 如何編寫自己的Shell配置文件(配置腳本)? 學習了《Shell配置文件的加載》一節,讀者應該知道 Shell 在登錄和非登錄時都會加載哪些配置文件了。對于普通用戶來說,也許 ~/.bashrc 才是最重要的文件,因為不管是否登錄都會加載該文件。 我們…

【數據處理】NumPy數組的合并操作,如何將numpy數組進行合并?

,NumPy中的合并操作是指將兩個或多個數組合并成一個數組的操作。這種操作可以通過不同的函數來實現。 一、橫向合并(水平合并) 橫向合并是指將兩個具有相同行數的數組按列方向合并成一個數組的操作。在NumPy中,可以使用hstack()…

044:vue中引用json數據的方法

第044個 查看專欄目錄: VUE ------ element UI 專欄目標 在vue和element UI聯合技術棧的操控下,本專欄提供行之有效的源代碼示例和信息點介紹,做到靈活運用。 (1)提供vue2的一些基本操作:安裝、引用,模板使…

多相Buck的工作原理

什么是多相Buck電源? 多相電源控制器是一種通過同時控制多個電源相位的設備,以提供穩定的電力供應。相位是指電源中的電流和電壓波形。多相控制器的設計旨在最大程度地減小電力轉換系統的紋波,并提高整體能效。它通常包含一系列的功率級聯&a…

我的創作紀念日1024天紀念

機緣 經歷的1024天,突然有一種驚奇,日子一天天過,有種恍惚的感覺 收獲 從最開始的隨筆,慢慢向著筆記總結轉變,不經意間積累了好多 憧憬 雖不知最終會怎樣發展,但堅持與向前是一定的,未來一…

結構化布線系統

滿足下列需求: 1.標準化:國際、國家標準。 2.實用性:針對實際應用的需要和特點來建設系統。 3.先進性:采用國際最新技術。5-10年內技術不落后。 4.開放性:整個系統的開放性。 5.結構化、層次化:易于管理和維…

Matplotlib數據可視化

繪圖基礎語法 1 創建畫布并且創建子圖 首先創建一個空白的畫布,并且可以將畫布分為幾個部分,這樣就可以在同一附圖上繪制多個圖像。 plt.figure 創建一個空白畫布,可以指定畫布大小、像素 figure.add_subplot 創建并且選中子…

docker鏡像、容器管理與遷移

鏡像管理 搜索鏡像: 這種方法只能用于官方鏡像庫 搜索基于 centos 操作系統的鏡像 # docker search centos 按星級搜索鏡像: 查找 star 數至少為 100 的鏡像,默認不加 s 選項找出所有相關 ubuntu 鏡像: …

【web安全】文件讀取與下載漏洞

前言 菜某整理僅供學習,有誤請賜教。 概念 個人理解:就是我們下載一個文件會傳入一個參數,但是我們可以修改參數,讓他下載其他的文件。因為是下載文件,所以我們可以看到文件里面的源碼,內容。 文件讀取…

Python嗅探和解析網絡數據包

網絡工具解釋 Scapy是Python2和Python3都支持的庫。 它用于與網絡上的數據包進行交互。 它具有多種功能,通過這些功能我們可以輕松偽造和操縱數據包。 通過 scapy 模塊,我們可以創建不同的網絡工具,如 ARP Spoofer、網絡掃描儀、數據包轉儲器…

swiftUi——顏色

在SwiftUI中,您可以使用Color結構來表示顏色。Color可以直接使用預定義的顏色,例如.red、.blue、.green等,也可以使用自定義的RGB值、十六進制顏色代碼或者系統提供的顏色。 1. 預定義顏色 Text("預定義顏色").foregroundColor(.…

Swing程序設計(9)復選框,下拉框

文章目錄 前言一、復選框二、下拉框總結 前言 該篇文章簡單介紹了Java中Swing組件里的復選框組件、列表框組件、下拉框組件,這些在系統中都是常用的組件。 一、復選框 復選框(JCheckBox)在Swing組件中的使用也非常廣泛,一個方形方…

Albumentations(Augmentation Transformations)

Albumentations(Augmentation Transformations) Albumentations(Augmentation Transformations)是一個用于圖像數據增強(數據增廣)的Python包。它提供了豐富的圖像增強技術,用于訓練機器學習模…

hadoop安裝與配置-shell腳本一鍵安裝配置(集群版)

文章目錄 前言一、安裝準備1. 搭建集群 二、使用shell腳本一鍵安裝1. 復制腳本2. 增加執行權限3. 分發腳本4. 執行腳本5. 加載用戶環境變量 三、啟動與停止1. 啟動/停止hadoop集群(1) 復制hadoop集群啟動腳本(2) 增加執行權限(3) 啟動hadoop集群(4) 停止hadoop集群(5) 重啟hado…

智慧社區前景無限,科技引領未來發展

社區是城鎮化發展的標志,作為人類現代社會的生活的基本圈子,是人類生活離不開的地方,社區人口密度大、車輛多,管理無序,社區的膨脹式發展多多少少帶來一定的管理上的缺失。社區作為智慧城市建設的重要一環,…

編譯基于LIO-SAM的liorf“Large velocity, reset IMU-preintegration!“

使用LIO-SAM修改的代碼liorf(因自己使用的IMU傳感器是 6-axis ouster): LIO-SAM代碼連接: https://github.com/TixiaoShan/LIO-SAM liorf代碼連接: https://github.com/YJZLuckyBoy/liorf 編譯運行出現錯誤&#…

eve-ng山石網科HillStone鏡像部署

HillStone 部署 author:leadlife data:2023/12/4 mains:EVE-ng HillStone 鏡像部署 - use hillstone-sg6000 default:hillstone/hillstone 傳輸 scp hillstone-sg6000.zip root192.168.3.130:/opt/unetlab/addons/qemu/部署 cd …

echarts繪制一個環形圖

其他echarts&#xff1a; echarts繪制一個柱狀圖&#xff0c;柱狀折線圖 echarts繪制一個餅圖 echarts繪制一個環形圖2 效果圖&#xff1a; 代碼&#xff1a; <template><div class"wrapper"><!-- 環形圖 --><div ref"doughnutChart…

深入理解Spring Kafka中@KafkaListener注解的參數與使用方式

Apache Kafka作為一個強大的消息代理系統&#xff0c;與Spring框架的集成使得在分布式應用中處理消息變得更加簡單和靈活。Spring Kafka提供了KafkaListener注解&#xff0c;為開發者提供了一種聲明式的方式來定義消息監聽器。在本文中&#xff0c;我們將深入探討KafkaListener…

C++STL的string(超詳解)

文章目錄 前言C語言的字符串 stringstring類的常用接口string類的常見構造string (const string& str);string (const string& str, size_t pos, size_t len npos); capacitysize和lengthreserveresizeresize可以刪除數據 modify尾插插入字符插入字符串 inserterasere…