Vue Router 完全指南:從入門到實戰,高效管理前端路由

前言

????????在現代化的前端開發中,路由管理是構建單頁應用(SPA)的核心功能之一。Vue.js 作為主流的前端框架之一,提供了強大的官方路由庫Vue Router,幫助開發者高效管理頁面跳轉、動態加載、權限控制等關鍵需求。

????????無論是構建企業級后臺系統,還是開發高性能的 Web 應用,靈活運用 Vue Router 都能顯著提升用戶體驗和開發效率。本文將深入解析 Vue Router 的核心概念、最佳實踐以及高級技巧,幫助開發者掌握路由管理的精髓,打造更流暢、可維護的前端應用。

步驟

1.安裝

npm i vue-router@4

? ? ? ? 使用該命名安裝Vue Router

2.創建文件配置路由實例

? ? ? ? 在src文件夾目錄下創建router文件夾,在該文件夾中創建index.js,在其配置路由

// 1.導入 createRouter 和 createWebHistory 
import { createRouter, createWebHistory } from 'vue-router'// 2.定義路由
const routes = [{path: '/', // 重定向redirect: '/home'},{path: '/home',component: () => import("../components/home.vue")},{path: '/about',component: () => import("../components/about.vue")}
]// 3.創建路由實例
const router = createRouter({history: createWebHistory(), // 歷史模式routes
})// 4.導出路由實例
export default router

? ? ? ? 除了歷史模式以外還有哈希模式,它們的區別如下:

哈希模式(Hash Mode)

????????哈希模式利用URL中的#符號來模擬路由。例如,http://example.com/#/about。瀏覽器不會將#號后面的內容發送到服務器,因此路由變化不會觸發頁面刷新。

  • 無需服務器配置即可直接使用,適合靜態部署。
  • 兼容性較好,支持老舊瀏覽器。
  • URL 中帶有 #,美觀性稍差。

歷史模式(History Mode):

? ? ? ??歷史模式利用HTML5的history.pushState API實現無刷新路由切換,例如,http://example.com/about。URL更簡潔,但需要服務器支持。

  • 需要服務器配置,確保所有路徑返回?index.html,避免 404 錯誤。
  • URL更美觀,無#符號
  • 兼容性稍差,不支持IE9及以下版本。

選擇建議

  • 需要快速部署或靜態托管時,選擇哈希模式。
  • 追求美觀且能配置服務器時,選擇歷史模式。

3.全局引用

? ? ? ? 將配置好的路由實例引入到main.js中,代碼如下:

import router from './router'const app = createApp(App)app.use(router)

?4.配置路由視圖和導航

? ? ? ? 在App.vue或根組件中,添加<router-view>作為路由組件的渲染出口,并使用<router-link>實現導航跳轉,示例代碼如下:

<template><div class="app"><!-- 導航鏈接 --><router-link to="/home">home</router-link><router-link to="/about">about</router-link><!-- 路由組件渲染位置 --><router-view></router-view></div> 
</template>

5.動態路由與參數傳遞

? ? ? ? 通過冒號 : 定義動態路由參數,例如用戶詳情頁面:

{path:'/user/:id',component: () => import("../components/User.vue")}

? ? ? ? 在需要進行跳轉時通過router.push進行跳轉:

<script setup>
import { ref } from 'vue';
import router from './router';const id = ref(22)
function handleUserPage() {router.push(`/user/${id.value}`)
}
</script>

? ? ? ? 在組件中通過useRoute獲取參數:

<script setup>
import { useRoute } from 'vue-router';const route = useRoute();
console.log(route.params.id);
</script>

6.路由守衛配置

? ? ? ? 比如說我們進入一些頁面時需要先登錄,為防止在用戶沒有登錄的情況下通過url進入首頁,因此就需要去配置全局前置守衛beforeEach

    {path: '/user/:id',name: 'user',component: () => import("../components/User.vue")}// 配置路由守衛
router.beforeEach((to, from, next) => {if (to.name === 'user') {  // 通過name匹配const id = to.params.id;if (id === '123') {next();} else {next('/home');}} else {next();}
})

? ? ? ? 就比如說這個例子,當我們需要進入user組件時,需要去判斷它的id是不是為123,如果是則放行,不是則跳轉到home組件。

? ? ? ? 但在實際項目中,這里一般是對登錄功能進行操作的,當用戶登錄時我們會將token保存起來,這里就去判斷是否有token,如果有則放行進入首頁,沒有則無法進入首頁。

7.路由元信息

????????為路由添加自定義數據:

    {path: '/home',component: () => import("../components/home.vue"),meta:{requiresAuth:true, title:'首頁'}},

? ? ? ? 通過導航守衛修改頁面標題:

router.afterEach((to, from) => {document.title = to.meta.title || '默認標題';
})

結語:

? ? ? ??感謝閱讀,期待這些見解能為你的學習或工作帶來啟發。若有更多疑問或需求,歡迎進一步交流與討論。

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

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

相關文章

Sentinel熱點參數限流完整示例實現

Sentinel熱點參數限流完整示例實現 1. 添加Maven依賴 (pom.xml) <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.2.7.RELEASE</version> </depend…

正則表達式深度解析:從LeetCode 3136題說起

正則表達式深度解析&#xff1a;從LeetCode 3136題說起 引言 正則表達式&#xff08;Regular Expression&#xff0c;簡稱RegEx&#xff09;是一種強大的字符串匹配工具&#xff0c;在字符串處理、數據驗證、文本搜索等場景中有著廣泛的應用。本文將以LeetCode 3136題"有效…

映美打印機-URL頁面打印

<?php /** 打印 - 映美云 https://open.jolimark.com/doc/ */ namespace Home\Controller; use Admin\Logic\OrderLogic;class PrintController extends BaseController {private $appid "";private $appkey "";//打印機編號private $deviceIds &qu…

機器學習算法 ——XGBoost 的介紹和使用

前言&#xff1a; 最近在工作中遇到一個結構化數據回歸預測的問題&#xff0c;用到了很多回歸算法&#xff08;如多元線性回歸等&#xff09;都沒有很好的效果&#xff0c;于是使用了XGBoost&#xff0c;自己也沖三個特征參數人為的增加來幾個&#xff0c;訓練出來的效果還是很…

Linux操作系統之信號:保存與處理信號

目錄 前言&#xff1a; 前文回顧與補充&#xff1a; 信號的保存 PCB里的信號保存 sigset_t 信號集操作函數 信號的處理 信號捕捉的流程&#xff1a;?編輯 操作系統的運行原理 硬件中斷 時鐘中斷 死循環 軟中斷 總結&#xff1a; 前言&#xff1a; 在上一篇文…

Spring Boot 設置滾動日志logback

Spring Boot 的 logback 框架 Spring Boot 默認內置了 Logback 作為日志實現框架&#xff0c;只需要在resources文件夾下添加一個logback-spring.xml&#xff0c;springboot會按照你的設置自動開啟logback日志功能。 配置 logback-spring.xml 實現每天產生一個日志文件&#xf…

如何定義一個只能在堆上或棧上生成對象的類

在C中&#xff0c;可以通過特定的技術手段來控制對象只能在堆(heap)或棧(stack)上創建。只能在堆上創建對象的類要實現這一點&#xff0c;我們需要阻止用戶直接實例化對象&#xff0c;而只能通過new操作符創建。class HeapOnly { public:static HeapOnly* create() {return new…

1.1 前端-vue3項目的創建

構建工具先搭好vue3框架 vue2的vue-cli腳手架基于webpack構建工具創建vue的框架. 而在vue3&#xff0c;可以通過vite構建工具創建vue3項目&#xff0c;性能更優。 兩者創建方式的區別&#xff1a;cmd命令基于的構建工具vue2/vue3vue create 項目名稱&#xff08;或 vue ui圖形化…

PHP password_get_info() 函數

password_get_info() 函數用于返回指定散列&#xff08;hash&#xff09;的相關信息。 PHP 版本要求: PHP 5 > 5.5.0, PHP 7 語法 array password_get_info ( string $hash ) 參數說明&#xff1a; $hash: 一個由 password_hash() 創建的散列值。 返回值 返回三個元素…

mac上的app如何自動分類

使用文件夾進行手動分類在Finder中創建文件夾&#xff0c;將同類應用拖入同一文件夾。右鍵點擊Dock上的應用圖標&#xff0c;選擇「選項」→「在Finder中顯示」&#xff0c;可快速定位應用安裝位置。利用Launchpad自動分組打開Launchpad&#xff08;觸控板四指捏合或按F4鍵&…

LLM面試題目 3

LLM面試題目 3 什么是自注意力機制(Self-Attention)?為什么它在LLM中很重要?如何評估LLM的性能?LLM面臨的挑戰有哪些?Transformer和RNN的區別是什么?LLM如何處理多輪對話? 題目講解 什么是自注意力機制(Self-Attention)?為什么它在LLM中很重要? 自注意力機制是一種…

linux上的軟掛載操作方法

針對linux上的軟掛載 可以查看linux已經掛載和存儲的磁盤分區 df -hfdisk 命令是檢索相同信息的另一種方法&#xff0c;可以看到所有的磁盤分區 sudo fdisk -l 要將磁盤分區 /dev/sda1 掛載到 /home/visionx/EXD1 目錄 步驟 1&#xff1a;準備工作 1.創建掛載目錄&#xff08;如…

SecretFlow 隱語 (2) --- 隱語架構概覽

在前邊兩篇文章中&#xff0c;介紹了數據要素和可信流通相關的內容&#xff0c;以及基于p2p模式的安裝方法 SecretFlow 隱語 (1) --- 快速入門 關于在Linux上部署 SecretFlow --- P2P部署模式 由于安裝過程中出現意外報錯&#xff0c;現已提交issue等待官方技術人員查閱&#x…

PHP語言基礎知識(超詳細)第二節

二十七. 數組的遍歷 1)通過函數進行遍歷:(例:demo07) (此方式不能完全遍歷數組,需要借助其他功能輔助)(不推薦,了解即可) key():返回數組中當前指針所在位置的鍵。 current():返回數組中當前指針所在位置的值。 例如:demo07: <?php/*key():返回數組中…

網絡--OSPF實驗

目錄 OSPF實驗報告 一、實驗拓撲 二、實驗要求 三、實驗思路 1.IP地址劃分 2. OSPF 部署 3. 其它配置 4. 驗證測試 四、實驗步驟 1.IP 地址配置 2.OSPF 部署 3.其它配置 4.驗證測試 OSPF實驗報告 一、實驗拓撲 二、實驗要求 1、R1-R3為區域0&#xff0c;R3-R4為…

Go語言第一個程序--hello world!

文章目錄一、Go 語言程序安裝二、運行程序三、go mod tidy 命令四、遇到的問題五、VS Code 調試 go 程序的相關配置說明一、Go 語言程序安裝 Go語言下載鏈接&#xff1a;https://studygolang.com/dl 雙擊打開下一步下一步即可。 驗證安裝&#xff1a;go version 二、運行程序 創…

【MCU控制 初級手札】1.1 電阻

作者&#xff1a;電控工程手札 本博文內容著作權歸作者所有&#xff0c;轉載請務必保留本文鏈接 目錄1. 定義2. 電導3. 電阻率4. 電導率5. 伏安特性6. 開路與短路7. 功率8. 應用元件特性&#xff08;端子特性&#xff09;&#xff1a;元件的兩個端子的電路物理量之間的代數函數…

JS中async/await功能介紹和使用演示

JS 中 async/await 功能介紹與使用演示 一、功能介紹基本概念 async&#xff1a;用于聲明異步函數&#xff0c;返回一個 Promise 對象。即使函數內沒有顯式返回 Promise&#xff0c;也會隱式將返回值封裝為 Promise.resolve()。await&#xff1a;僅能在 async 函數內部使用&…

系統調用入口機制:多架構對比理解(以 ARM64 為主)

&#x1f4d6; 推薦閱讀&#xff1a;《Yocto項目實戰教程:高效定制嵌入式Linux系統》 &#x1f3a5; 更多學習視頻請關注 B 站&#xff1a;嵌入式Jerry 系統調用入口機制&#xff1a;多架構對比理解&#xff08;以 ARM64 為主&#xff09; 本篇內容聚焦于系統調用的入口實現機…

java MultipartFile初始化

在Java中&#xff0c;MultipartFile 是Spring框架中用于處理文件上傳的接口。?開發者通常不會直接初始化MultipartFile對象&#xff0c;而是通過Spring MVC的控制器方法參數接收上傳的文件。如果需要在測試或模擬場景中創建其實例&#xff0c;可以使用Spring的MockMultipartFi…