Vue.js中的路由導航守衛和其使用方法

Vue.js 中的路由導航守衛是 Vue Router 提供的一套機制,用于在路由切換的過程中執行自定義代碼邏輯,包括但不限于權限驗證、頁面滾動位置保存、加載數據等。它分為三種類型:

  1. 全局前置守衛 (Global beforeEach Guard)
    全局前置守衛應用在整個應用程序的路由跳轉之前,不論你訪問任何路由都會觸發。注冊全局前置守衛通過調用 router.beforeEach 方法,并傳入一個回調函數。這個回調函數接收三個參數:

to: Route: 即將要進入的目標路由對象。
from: Route: 當前導航正要離開的路由對象。
next: Function: 調用該函數進行下一步操作。它可以接受一個可選的參數(通常是一個錯誤對象),決定是否以及如何繼續導航流程。

import { createRouter, createWebHistory } from 'vue-router';
import routes from './routes';const router = createRouter({history: createWebHistory(),routes,
});router.beforeEach((to, from, next) => {// 在這里可以執行異步操作,例如檢查用戶登錄狀態if (!isAuthenticated) {next('/login');} else {next();}
});
  1. 全局解析守衛 (Global afterEach Guard)
    除了前置守衛,Vue Router 還提供了全局后置守衛 (router.afterEach),這個守衛會在每次導航完成,即將激活組件渲染之后觸發,但不涉及阻止或更改導航過程。
router.afterEach((to, from) => {// 可以在這里記錄路由歷史、頁面瀏覽統計等操作
});
  1. 路由獨享守衛 (Per-Route Guard)
    可以在單個路由配置中定義前置守衛和/或后置守衛,這些守衛僅針對特定路由生效:
{path: '/admin',component: AdminPanel,beforeEnter: (to, from, next) => {// 執行特定于 /admin 路由的權限檢查或其他操作if (canAccessAdmin()) {next();} else {next({ name: 'access-denied' });}},
}
  1. 組件內的守衛 (In-Component Guards)
    在單個路由組件內,有三種類型的守衛:

beforeRouteEnter: 組件實例還未創建時就已存在的守衛,不能直接訪問組件實例,可以通過 next(vm => {}) 訪問組件實例并傳遞給回調函數。

export default {beforeRouteEnter(to, from, next) {next(vm => {vm.title = to.meta.title; // 設置組件標題});},
};

beforeRouteUpdate: 當路由的 params 或 query 發生變化(即當前路由路徑不變,只有參數變化)時觸發,此時可以直接訪問組件實例。

export default {beforeRouteUpdate(to, from, next) {this.loadData(to.params.id); // 更新組件數據next();},
};

beforeRouteLeave: 導航離開當前路由時觸發,可以用來確認是否允許離開。

export default {data() {return {unsavedChanges: false,};},methods: {confirmNavigation() {// 用戶確認邏輯...},},beforeRouteLeave(to, from, next) {if (this.unsavedChanges) {this.confirmNavigation().then(() => next()).catch(() => next(false));} else {next();}},
};

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

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

相關文章

python科學計算庫之Numpy庫的使用的簡單習題

Numpy庫 Numpy(Numerical Python的縮寫)是一個開源的Python庫,用于進行科學計算。它提供了一個高性能的多維數組對象(ndarray)及用于處理這些數組的各種工具和函數。由于其高效和靈活的數據結構以及豐富的功能&#x…

Google 地圖 API 教程--干貨(1/2)

Google Maps API 教程 在本教程中我們將學習如何使用谷歌地圖API V3創建交互式地圖。 什么是 API? API = 應用程序編程接口(Application programming interface)。 API(Application Programming Interface,應用編程接口)其實就是操作系統留給應用程序的一個調用接口,…

【d34】【Java】【力扣】27. 移除元素

題目 給你一個數組 nums 和一個值 val,你需要 原地 移除所有數值等于 val 的元素,并返回移除后數組的新長度。 不要使用額外的數組空間,你必須僅使用 O(1) 額外空間并 原地 修改輸入數組。 元素的順序可以改變。你不需要考慮數組中超出新長…

案例介紹:汽車售后服務網絡構建與信息抽取技術應用(開源)

一、引言 在當今競爭激烈的汽車行業中,售后服務的質量已成為品牌成功的關鍵因素之一。作為一位經驗豐富的項目經理,我曾參與構建一個全面的汽車售后服務網絡,旨在為客戶提供無縫的維修、保養和配件更換服務。這個項目的核心目標是通過高效的…

spring、springmvc、springboot框架的介紹

前言 我們已經學過Spring,SpringMVC,SpringBoot了,那這三者之間有沒有聯系或者區別呢? spring是一個一站式的輕量級java開發的框架,那我們剛開始使用spring的時候,是需要配置很多的配置文件以及繁瑣的過程…

狀態機實現雙擊、短按、長按等按鍵識別檢測算法

1、按鍵識別算法的作用 按鍵識別算法在不同的技術和應用背景下有不同的作用,但其核心目標都是準確、可靠地檢測和區分用戶通過物理或虛擬按鍵所執行的操作。按鍵識別算法在各類電子設備及系統中起到至關重要的作用,它確保了人機交互的有效性和準確性&…

Vue前端+快速入門【詳解】

目錄 1.Vue概述 2. 快速入門 3. Vue指令 4.表格信息案例 5. 生命周期 1.Vue概述 1.MVVM思想 原始HTMLCSSJavaScript開發存在的問題:操作麻煩,耦合性強 為了實現html標簽與數據的解耦,前端開發中提供了MVVM思想:即Model-Vi…

Mysql-主從架構篇(一主多從,半同步案例搭建)

主從架構 主從架構有什么用? 通過搭建MySQL主從集群,可以緩解MySQL的數據存儲以及訪問的壓力。 數據安全(主備):給主服務增加一個數據備份。基于這個目的,可以搭建主從架構,或者也可以基于主…

GO語言學習筆記(與Java的比較學習)(九)

讀寫數據 讀取用戶的輸入 最簡單的辦法是使用 fmt 包提供的 Scan 和 Sscan 開頭的函數。 Scanln 掃描來自標準輸入的文本,將空格分隔的值依次存放到后續的參數內,直到碰到換行。Scanf 與其類似,除了 Scanf 的第一個參數用作格式字符串&…

大數據開發(Java面試真題-卷三)

大數據開發(Java面試真題) 1、簡要介紹以下JVM有幾種垃圾收集器?2、Java中Synchronized的底層原理是什么?3、Java String為什么是不可變的?為什么要設計成不可變?4、泛型?5、常用的反射方法&…

深入Java日志框架及其最佳實踐

概述 在Java應用開發中,日志框架是確保應用穩定性和可觀察性的關鍵組件。它幫助開發者記錄應用的行為、診斷問題,并監控系統的健康狀況。隨著Java生態系統的不斷發展,各種日志框架也應運而生,各有特點和優勢。本文將詳細探討幾個…

redis進階(一)

文章目錄 前言一、Redis中的對象的結構體如下:二、壓縮鏈表三、跳躍表 前言 Redis是一種key/value型數據庫,其中,每個key和value都是使用對象表示的。 一、Redis中的對象的結構體如下: /** Redis 對象*/ typedef struct redisO…

c# .net8 香橙派orangepi + hc-04藍牙 實例

這些使用c# .net8開發,硬件 香橙派 orangepi 3lts和 hc-04藍牙 使用場景:可以通過這個功能,手機連接orangepi進行wifi等參數配置 硬件: 1、帶USB口的linux開發板orangepi 2、USB 轉TTL 中轉接藍牙(HC-04) 某寶上買…

Vue的響應式原理是如何實現的

Vue的響應式原理主要**基于JavaScript的Object.defineProperty方法實現**。具體如下: 1. 數據劫持(Data Hijacking) Vue在初始化時,會遍歷data對象中的所有屬性,并使用Object.defineProperty將這些屬性轉換為getter/s…

Flink:Temporal Table Function(時態表函數)和 Temporal Join

博主歷時三年精心創作的《大數據平臺架構與原型實現:數據中臺建設實戰》一書現已由知名IT圖書品牌電子工業出版社博文視點出版發行,點擊《重磅推薦:建大數據平臺太難了!給我發個工程原型吧!》了解圖書詳情,…

AR時間序列模型

AR時間序列模型(AutoRegressive Time Series Model)是一種用于分析和預測時間序列數據的統計模型。該模型假設未來的觀測值與過去的觀測值相關,且該相關性可以通過線性回歸來描述。 AR模型的基本思想是將當前時刻的觀測值表示為過去幾個時刻…

設計模式(十五)狀態模式

請直接看原文:設計模式系列 ------------------------------------------------------------------------------------------------------------------------------- 前言 建議在閱讀本文前先閱讀設計模式(十一)策略模式這篇文章,雖說狀態…

java.sqlrecoverableexception: io error: the network adapter could not establ

數據庫相關學習資料下載地址: 數據庫相關資料合集 Java SQLRecoverableException: IO Error: The Network Adapter Could Not Establish Connection 在進行Java開發中,經常會遇到與數據庫進行交互的情況。然而,有時候我們可能會遇到java.sq…

Redis過期刪除策略

1、定時刪除: 一旦鍵過期就立即從內存中刪除,節省內存空間,但刪除過程會占用大量CPU時間,可能影響服務器的響應時間和吞吐量。 2、惰性刪除: 并不會立即從內存中刪除過期鍵,而是在需要訪問時才會檢查是否…

【MATLAB】MVMD_ MFE_SVM_LSTM 神經網絡時序預測算法

有意向獲取代碼,請轉文末觀看代碼獲取方式~也可轉原文鏈接獲取~ 1 基本定義 MVMD_MFE_SVM_LSTM神經網絡時序預測算法結合了多變量多尺度分解(MVMD)、多尺度特征提取(MFE)、支持向量機(SVM)和長…