【Vue2 ?】Vue2 入門之旅 · 進階篇(七):Vue Router 原理解析

在前幾篇文章中,我們介紹了 Vue 的性能優化機制、組件緩存等內容。本篇將深入解析 Vue Router 的原理,了解 Vue 如何管理路由并進行導航。


目錄

  1. Vue Router 的基本概念
  2. 路由模式:hash 和 history
  3. 路由匹配原理
  4. 導航守衛
  5. Vue Router 的路由過渡動畫
  6. 小結

Vue Router 的基本概念

Vue Router 是 Vue.js 官方提供的路由管理插件,負責管理 Vue 應用的頁面導航。通過 Vue Router,開發者可以創建單頁應用(SPA),在不同的視圖間進行切換而無需重新加載頁面。

Vue Router 的核心概念:

  • 路由配置:通過定義路由規則,告訴 Vue 哪個 URL 對應哪個組件。
  • 路由匹配:根據 URL 自動匹配對應的組件進行渲染。
  • 路由導航:實現頁面跳轉,通過編程式導航或聲明式導航切換視圖。

路由模式:hashhistory

Vue Router 支持兩種路由模式:hash 模式history 模式。它們分別有不同的工作原理和適用場景。

1. Hash 模式

在 Hash 模式下,URL 中的路由信息會通過 # 符號來傳遞。瀏覽器不會重新加載頁面,所有的路由切換都是通過修改 URL 后的哈希值來實現的。

http://example.com/#/home

優點:簡單,兼容性好,不需要服務器支持。

缺點:URL 中包含 #,影響 SEOURL 美觀。

2. History 模式

在 History 模式下,URL 使用的是 HTML5 提供的 History API,沒有 # 符號。Vue Router 會監聽瀏覽器的歷史記錄變化,來實現頁面的跳轉。

http://example.com/home

優點:URL 更加簡潔,符合現代 Web 應用的標準。

缺點:需要服務器支持,必須配置服務器返回 index.html,否則刷新頁面會 404


路由匹配原理

Vue Router 的路由匹配是基于 路徑匹配組件渲染 的。Vue Router 會根據 URL 的路徑找到匹配的組件,并將其渲染到頁面上。

路由配置

路由的配置由 routes 數組定義,每個路由對象包含路徑和組件兩個屬性。

復制代碼
const routes = [{ path: '/home', component: Home },{ path: '/about', component: About }
]

路由匹配

當瀏覽器的 URL 地址變化時,Vue Router 會依次與路由配置中的每個路徑進行匹配,直到找到符合的路徑并渲染相應組件。

const router = new VueRouter({routes
})

動態路由

Vue Router 還支持動態路由,允許在路徑中包含動態參數。

const routes = [{ path: '/user/:id', component: User }
]

當路徑為 /user/123 時,id 會作為參數傳遞給 User 組件。


導航守衛

導航守衛是 Vue Router 中的一個強大功能,它允許你在路由變化之前、之后或路由進入、離開時執行某些邏輯。常見的導航守衛包括 全局守衛路由獨享守衛組件內守衛

1. 全局守衛

全局守衛在路由變化之前或之后執行。可以使用 beforeEach 和 afterEach 方法進行配置。

復制代碼
router.beforeEach((to, from, next) => {// 路由切換前的操作next()
})

2. 路由獨享守衛

路由獨享守衛是針對每個路由獨立配置的守衛,可以在路由配置中直接添加 beforeEnter。

const routes = [{path: '/home',component: Home,beforeEnter: (to, from, next) => {// 路由獨享守衛next()}}
]

3. 組件內守衛

組件內守衛是在組件生命周期中執行的守衛,通常用在單個組件中。

復制代碼
export default {beforeRouteEnter(to, from, next) {// 進入路由前執行next()},beforeRouteLeave(to, from, next) {// 離開路由前執行next()}
}

Vue Router 的路由過渡動畫

Vue Router 還支持路由切換時的過渡動畫。通過 <transition> 標簽包裹路由視圖,可以為路由切換添加動畫效果。

示例:

復制代碼
<transition name="fade" mode="out-in"><router-view></router-view>
</transition><style>
.fade-enter-active, .fade-leave-active {transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {opacity: 0;
}
</style>

通過這種方式,可以為路由切換增加淡入淡出的動畫效果,提高用戶體驗。


小結

  1. Vue Router 是 Vue.js 的官方路由管理工具,支持 hash 模式history 模式
  2. 路由匹配是基于路徑和組件的,支持靜態和動態路由。
  3. 導航守衛 提供了強大的功能,用于在路由變化時執行特定邏輯。
  4. 路由過渡動畫 使得頁面切換更為流暢和自然。

📗下一篇進階文章,我們將學習 Vuex 內部機制,了解 Vuex 的核心工作原理以及如何管理狀態。

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

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

相關文章

Linux磁盤級文件/文件系統理解

Linux磁盤級文件/文件系統理解 1. 磁盤的物理結構 磁盤的核心是一個利用磁性介質和機械運動進行數據讀寫的、非易失性的存儲設備。 1.1 盤片 盤片是傳統機械硬盤中最核心的部件&#xff0c;它是數據存儲的物理載體。盤片是一個堅硬的、表面極度光滑的圓形碟片&#xff0c;被安裝…

【星海出品】rabbitMQ - 叁 應用篇

rabbitMQ 的基礎知識這里就不闡述了,可以參看我早年寫的文章 -> rabbitMQ 入門 https://blog.csdn.net/weixin_41997073/article/details/118724779 Celery 官網:http://www.celeryproject.org/ Celery 官方文檔英文版:http://docs.celeryproject.org/en/latest/index.h…

C# 每個chartArea顯示最小值、平均值、最大值

private void AddStatisticsAnnotations(ChartArea chartArea, int channelIndex) {RemoveExistingAnnotations(channelIndex);// 獲取ChartArea的相對坐標&#xff08;百分比&#xff09;float chartAreaX chartArea.Position.X; // X坐標&#xff08;百分比&#xff09;floa…

打破“不可能三角”:WALL-OSS開源,具身智能迎來“安卓時刻”?

目錄 引言&#xff1a;當“大腦”學會思考&#xff0c;機器人才能走出實驗室 一、具身智能的“不可能三角”&#xff1a;機器人“大腦”的核心困境 二、WALL-OSS的四把重錘&#xff1a;如何系統性地破解難題&#xff1f; 2.1 第一錘&#xff1a;更聰明的“大腦”架構 —— …

SigNoz分布式追蹤新體驗:cpolar實現遠程微服務監控

前言 SigNoz是一款開源的應用性能監控工具&#xff0c;專為微服務架構設計&#xff0c;集成了指標、追蹤和日志分析功能。它能夠全面監控分布式系統的性能&#xff0c;幫助開發團隊快速定位問題根源。SigNoz支持OpenTelemetry協議&#xff0c;可以無縫集成各種編程語言和框架&…

python編程原子化多智能體綜合編程應用(下)

上述代碼實現了基于Mesa框架的診斷智能體類,包含以下核心功能: 模塊化設計:通過類屬性分離數據與行為,支持不同專科智能體的擴展 狀態管理:實現idle/processing/error等狀態轉換,支持任務調度 診斷推理:集成機器學習模型,支持癥狀提取與多分類診斷 錯誤處理:包含模型加…

QT M/V架構開發實戰:QSqlQueryModel/ QSqlTableModel/ QSqlRelationalTableModel介紹

目錄[TOC](目錄)前言一、初步介紹二、QSqlQueryModel1.基礎定位2.特點3.核心接口4.典型用法5.優缺點三、QSqlTableModel1.基礎定位2.特點3.核心接口4.典型用法5.優缺點四、QSqlRelationalTableModel1.基礎定位2.特點3.核心接口4.典型用法 (示例&#xff1a;employees表有 dept_…

Terraform 從入門到實戰:歷史、原理、功能與阿里云/Azure 上手指南

前言&#xff1a;在云時代&#xff0c;企業的IT基礎設施早已從“幾臺服務器”演變為“橫跨多云的復雜網絡、計算、存儲集群”。但隨之而來的&#xff0c;是管理復雜度的爆炸式增長&#xff1a;開發環境和生產環境不一致、手動配置容易出錯、多云平臺操作方式各異、資源變更難以…

【計算機網絡 | 第10篇】信道復用技術

文章目錄信道復用技術&#xff1a;高效利用通信資源的智慧方案一、頻分復用&#xff08;FDM&#xff09;&#xff1a;按頻率劃分的并行通道二、時分復用&#xff08;TDM&#xff09;&#xff1a;按時間分割的輪流占用三、統計時分復用&#xff08;STDM&#xff09;&#xff1a;…

安卓13_ROM修改定制化-----禁用 Android 導航按鍵的幾種操作

Android 設備的導航按鍵通常包括后退鍵(Back)、主頁鍵(Home)和最近鍵(Recents),這些按鍵位于屏幕底部或設備實體區域。禁用導航按鍵可以幫助在特定應用場景(如信息亭模式或兒童鎖模式)中限制用戶操作。安卓設備上禁用底部虛擬導航鍵(返回、主頁、多任務鍵)有多種方法…

通過S參數測量評估電感阻抗:第2部分

S21雙端口分流和雙端口串聯方法 T這是兩篇文章中的第二篇&#xff0c;專門討論使用網絡分析儀測量 S 參數進行電感阻抗評估主題。上一篇文章 [1] 描述了阻抗測量和計算S11使用單端口分流器、雙端口分流器和雙端口串聯方法的參數。本文專門介紹阻抗測量和計算S21使用雙端口分流…

[deepseek] C語言頭文件與匯編實現討論

我想詢問一種代碼實現方式&#xff0c;使用C語言&#xff0c;例如main.c包含了自己編寫的庫文件abc.h&#xff0c;我想問的是&#xff1a;一、abc.h中是否可以有實現函數的代碼&#xff1b;二、abc.h中的函數是否可以在另一個后綴為asm的匯編文件中實現&#xff1f;非常好&…

`.cursorrules` 與 `.cursorcontext`:Cursor AI 編程助手時代下的“雙軌配置”指南

.cursorrules 與 .cursorcontext&#xff1a;AI 編程助手時代下的“雙軌配置”指南關鍵詞&#xff1a;Cursor、AI 編程、上下文管理、開發規范、技術治理 適合讀者&#xff1a;前端 / 全棧工程師、技術負責人、AI 輔助編程實踐者1. 為什么又多了兩個“點”文件&#xff1f; 隨著…

XR 和 AI 在 Siggraph 2025 上主導圖形的未來,獲取gltf/glb格式

Meta 的 Boba 和 Tiramisu XR 耳機&#xff08;來源&#xff1a;Meta&#xff09; Siggraph 2025 今年重返不列顛哥倫比亞省溫哥華&#xff0c;慶祝《玩具總動員》誕生 30 周年和視頻游戲實時渲染 20 周年。雖然 Siggraph 需要時間來欣賞過去&#xff0c;但它更多的是展望未來…

在 Ubuntu 22.04 系統(CUDA 12.9)中,通過本地DEB 包安裝 cuDNN 9.13.0 的方法步驟

以下是在 Ubuntu 22.04 系統(CUDA 12.9)中,通過本地單個 DEB 包安裝 cuDNN 9.13.0 的完整步驟,核心包含 GPG 密鑰配置與包安裝驗證,確保每一步可執行。 一、安裝前核心檢查(必做) 確保系統已滿足基礎條件,避免安裝失敗: 驗證 CUDA 版本:打開終端執行命令,確認當前…

Element 中 upload 編輯回顯文件上傳信息技巧

文章目錄需求分析需求 upload 編輯狀態下回顯已上傳的文件信息 分析 添加fileList <el-uploadstyle"width: 100%"ref"uploadRef"class"upload-demo"action"/prod-api/jc/files/upload"multiple:limit"1":on-success&q…

php簡介(第一天打卡)

一.php簡介 1.什么是php&#xff1f; 1.1 Php 為什么叫這個名字&#xff1f; Personal home page 最開始用于個人主頁建站 后更名為 hypertext preprocessor 超文本預處理 1.2 php是屬于哪種語言&#xff1f; 后端語言 &#xff08;從開發角度分類&#xff09; 服務端語言…

Android 車聯網——車載儀表屏開發(二十六)

通常汽車啟動后需要快速顯示儀表,而車載娛樂系統所在的Android系統,啟動是比較耗時的,所以通常儀表系統會做在一個小型輕量化的系統內,從而達到快速啟動的效果,最終實現汽車一發動,就立刻能顯示出儀表必須顯示的各項內容。 一、儀表功能介紹 1、儀表的發展 機械儀表:通…

RL--RLHF--PPO--GRPO--DPO速通

參考視頻&#xff1a;1小時速通 - 從強化學習到RLHF - 簡介_嗶哩嗶哩_bilibili 強化學習RL RL的核心就是智能體Agent 與 環境Environment的交互。 狀態&#xff08;State&#xff0c;s&#xff09;&#xff1a;環境在某一時刻的描述&#xff0c;表示當前情境。動作&#xff0…

hardhat 項目目錄介紹

使用 npx hardhat init初始化一個 Hardhat 項目后&#xff0c;會生成一個結構清晰的目錄&#xff0c;每個部分都有其特定用途。下面是一個表格匯總了主要的目錄和文件及其作用&#xff0c;方便你快速了解&#xff1a;contracts/??存放項目的 ??Solidity 智能合約源代碼??…