vue-router相關理解

一、前言

隨著 Vue.js 在前端開發中的廣泛應用,Vue Router 成為了 Vue 官方推薦的路由管理器。它不僅支持單頁面應用(SPA)中常見的路由跳轉、嵌套路由、懶加載等功能,還提供了導航守衛、動態路由等高級特性。

本文將帶你深入了解:

  • Vue Router 的基本概念;
  • 路由配置與使用方式;
  • 嵌套路由與命名視圖;
  • 動態路由與懶加載;
  • 導航守衛機制;
  • 實際開發中的典型使用場景;

通過這篇文章,你將掌握 Vue Router 的核心功能與原理,能夠熟練地在項目中進行路由管理。

二、什么是 Vue Router?

Vue Router 是 Vue.js 官方的路由管理庫,用于構建單頁應用(SPA),實現不同組件之間的切換和導航。

? 核心功能:

功能描述
路由映射將路徑映射到組件
組件切換不刷新頁面切換組件
參數傳遞支持動態路由參數(如?/user/:id
嵌套路由實現父子級組件結構
懶加載異步加載組件,提升性能
導航守衛控制路由跳轉邏輯(權限驗證、登錄攔截等)

三、Vue Router 的安裝與配置

? 安裝(Vue 3)

npm install vue-router@4

? 創建路由實例(router/index.js

import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'
import About from '../views/About.vue'const routes = [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: About}
]const router = createRouter({history: createWebHistory(),routes
})export default router

? 在?main.js?中掛載路由

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'createApp(App).use(router).mount('#app')

四、基礎使用:路由跳轉與組件渲染

??<router-link>:聲明式導航

<router-link to="/">首頁</router-link>
<router-link to="/about">關于</router-link>

??<router-view>:動態渲染組件的位置

<router-view />

📌 效果:

  • 點擊鏈接時,不會刷新頁面;
  • 頁面內容根據當前路徑自動切換為對應組件;

五、動態路由與參數傳遞

? 動態路由示例

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

? 在組件中獲取參數

export default {mounted() {console.log(this.$route.params.id)}
}

📌 示例 URL:

  • /user/123?→?this.$route.params.id === '123'

六、嵌套路由(父子路由)

適用于多級菜單、布局嵌套等場景。

? 路由配置

{path: '/dashboard',name: 'Dashboard',component: DashboardLayout,children: [{path: 'profile',component: Profile},{path: 'settings',component: Settings}]
}

? 頁面結構

<!-- DashboardLayout.vue -->
<template><div><h2>儀表盤布局</h2><router-view /> <!-- 子路由組件在這里顯示 --></div>
</template>

📌 訪問路徑:

  • /dashboard/profile
  • /dashboard/settings

七、命名視圖(多個?<router-view>

適用于需要在同一頁面展示多個組件區域,例如側邊欄 + 主體內容。

? 路由配置

{path: '/layout',components: {default: MainContent,sidebar: SideBar}
}

? 模板中使用多個?<router-view>

<router-view />
<router-view name="sidebar" />

八、懶加載組件(按需加載)

懶加載是優化首屏加載速度的重要手段,Vue Router 支持異步加載組件。

? 使用?import()?實現懶加載

{path: '/contact',name: 'Contact',component: () => import('../views/Contact.vue')
}

📌 特點:

  • 只有訪問該路由時才會加載對應的組件;
  • 減少初始加載時間,提升用戶體驗;

九、導航守衛(Navigation Guards)

導航守衛用于控制路由的跳轉邏輯,常用于權限驗證、登錄攔截、頁面緩存等場景。

? 全局前置守衛:beforeEach

router.beforeEach((to, from, next) => {if (to.meta.requiresAuth && !isAuthenticated()) {next('/login') // 未登錄跳轉登錄頁} else {next()}
})

? 路由獨享守衛:beforeEnter

{path: '/profile',name: 'Profile',component: Profile,beforeEnter: (to, from, next) => {if (checkPermission(to.params.id)) {next()} else {next('/')}}
}

? 組件內守衛

  • beforeRouteEnter
  • beforeRouteUpdate
  • beforeRouteLeave
export default {beforeRouteLeave(to, from, next) {const answer = window.confirm('確定離開嗎?數據可能未保存。')if (answer) {next()} else {next(false)}}
}

十、編程式導航(JS 控制跳轉)

除了使用 <router-link> 進行跳轉外,還可以通過 JS 方式實現導航。

// 字符串路徑
this.$router.push('/home')// 命名路由 + 參數
this.$router.push({ name: 'User', params: { id: 123 } })// 替換當前歷史記錄(不產生新記錄)
this.$router.replace('/login')

十一、常見問題與解決方案

問題解決方案
路由跳轉后頁面不更新使用?key?屬性強制重新渲染組件
獲取不到?$route?或?$router確保組件已正確注冊并處于?<router-view>?內
動態添加路由無效使用?router.addRoute()?方法
多個?<router-view>?不生效檢查是否遺漏了?name?屬性或拼寫錯誤
導航守衛無法阻止跳轉檢查是否調用了?next()?并正確返回結果

十二、總結對比表

功能推薦方式
基礎路由跳轉<router-link>?+?<router-view>
動態路由傳參params?/?query
嵌套組件結構children?配置
多視圖展示命名?<router-view>
按需加載組件() => import(...)
權限控制全局/路由/組件守衛
編程式跳轉router.push()?/?replace()
推薦程度?? 強烈推薦掌握

十三、結語

感謝您的閱讀!如果你有任何疑問或想要分享的經驗,請在評論區留言交流!

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

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

相關文章

uni-app 自定義路由封裝模塊詳解(附源碼逐行解讀)

&#x1f680;uni-app 自定義路由封裝模塊詳解&#xff08;附源碼逐行解讀&#xff09; &#x1f4cc; 請收藏 點贊 關注&#xff0c;獲取更多 uni-app 項目實用技巧&#xff01; 在實際 uni-app 項目中&#xff0c;我們常常需要對 uni.navigateTo、uni.switchTab 等 API 做…

QML顯示圖片問題解決辦法

以前用qtwediget的時候&#xff0c;好像是放在qlabel或者什么組件上面&#xff0c;把圖片的路徑放上去就可以直接加載&#xff0c;但我用QML創建界面的時候就遇到了問題&#xff0c;哦對&#xff0c;qtwedget用qpixmap組件顯示圖片&#xff0c;也有image。話說回來&#xff0c;…

Vue中使用jsx

1. jsx的babel配置 1.1 在項目中使用jsx&#xff0c;需要添加對jsx的支持&#xff1a; jsx通常會通過Babel來進行轉換(React編寫的jsx就是通過babel轉換的)Vue中&#xff0c;只需要在Babel中配置對應的插件即可以下列舉需要支持轉換的案例&#xff1a; template -> vue-l…

Spring Cache+Redis緩存方案 vs 傳統redis緩存直接使用RedisTemplate 方案對比

結合 Spring Cache 和 Redis 的緩存方案&#xff08;即 Spring Cache Redis&#xff09;相較于普通的 Redis 緩存使用&#xff08;如直接通過 RedisTemplate 操作&#xff09;&#xff0c;具有以下顯著優勢&#xff1a; 具體實現方案請參考&#xff1a;Spring CacheRedis緩存…

Web應用安全漏洞掃描:原理、常用方法及潛在風險解析?

Web應用安全的關鍵環節在于進行漏洞掃描&#xff0c;這種掃描通過自動化或半自動化的方式&#xff0c;對應用進行安全測試。它能揭示出配置錯誤、代碼缺陷等眾多安全風險。接下來&#xff0c;我將詳細闡述這些情況。 掃描原理 它主要模擬攻擊者的行為&#xff0c;以探測和攻擊…

Spring中@Value注解:原理、加載順序與實戰指南

文章目錄 前言一、Value注解的核心原理1.1 容器啟動階段&#xff1a;環境準備1.2 Bean實例化階段&#xff1a;后置處理器介入1.3 值解析階段&#xff1a;雙引擎處理1. 占位符解析&#xff08;${...}&#xff09;2. SpEL表達式解析&#xff08;#{...}&#xff09; 1.4 類型轉換與…

MySQL 8配置文件詳解

MySQL 8 配置文件詳解 MySQL 8 的配置文件(my.cnf或my.ini)是MySQL服務器啟動時讀取的主要配置文件&#xff0c;它包含了服務器運行所需的各種參數設置。以下是MySQL 8配置文件的詳細解析&#xff1a; 配置文件位置 MySQL 8 會按照以下順序查找配置文件&#xff1a; /etc/m…

臺灣住宅IP哪家好,怎么找到靠譜的海外住宅IP代理商

探索臺灣住宅IP&#xff1a;如何找到靠譜的海外住宅IP代理商&#xff1f; 在當今數字化時代&#xff0c;海外住宅IP的需求日益增長&#xff0c;尤其在跨境電商、網絡營銷、數據抓取等領域。對于需要臺灣住宅IP的用戶來說&#xff0c;找到一家靠譜的海外住宅IP代理商至關重要。本…

讀研一些畢業感想

回首過往三年&#xff0c;從躊躇迷茫到明晰堅定&#xff0c;從稚嫩懵懂到明理成熟&#xff0c;一切只覺輕舟已過萬重山。 依稀記得我拉著行李箱跋山涉水來到學校的那天&#xff0c;早上從廣東中山乘坐10小時高鐵到北京西&#xff0c;然后坐1一個多小時地鐵到學校&#x…

《飛算JavaAI:穩定、高效、跨平臺的AI編程工具優勢解析》

隨著人工智能技術的不斷發展&#xff0c;AI編程工具越來越成為開發者們在研究和應用AI模型時不可或缺的利器。國內外的AI編程工具多種多樣&#xff0c;涵蓋了從基礎編程語言、框架到圖形化界面的多種選擇。然而&#xff0c;在這些工具中&#xff0c;飛算JavaAI作為一種基于Java…

day27/60重寫(補充)

DAY 27 函數專題2&#xff1a;裝飾器 ps&#xff1a;第一期day27對應5月16日 知識點回顧&#xff1a; 裝飾器的思想&#xff1a;進一步復用函數的裝飾器寫法注意內部函數的返回值 作業&#xff1a; 編寫一個裝飾器 logger&#xff0c;在函數執行前后打印日志信息&#xff08;如…

網傳西門子12億美元收購云原生工業軟件,云化PLM系統轉機在協同

近日&#xff0c;網傳西門子將以12億美元全現金交易收購云原生MES公司FlexFact&#xff0c;并整合其技術至Xcelerator工業軟件平臺。如果此次收購動作完成&#xff0c;將會成為西門子加速工業云轉型的標志性動作&#xff0c;背后的意義也極為深遠&#xff0c;不僅會直接響應競爭…

大模型筆記_檢索增強生成(RAG)

1. RAG的概念 RAG&#xff08;Retrieval-Augmented Generation&#xff09; 是一種結合 信息檢索&#xff08;Retrieval&#xff09;與文本生成&#xff08;Generation&#xff09;的模型架構&#xff0c;旨在通過動態引入外部知識庫或實時數據&#xff0c;提升大語言模型&…

Spring Security是如何完成身份認證的?

1. 用戶名和密碼被過濾器獲取到&#xff0c;封裝成 Authentication ,通常情況下是 UsernamePasswordAuthenticationToken 這個實現類。 2. AuthenticationManager 身份管理器負責驗證這個 Authentication 3. 認證成功后&#xff0c; AuthenticationManager 身份管理器返回一…

Python爬蟲實戰:研究xmltodict庫相關技術

1. 引言 1.1 研究背景與意義 氣象數據是環境研究、農業生產、城市規劃等領域的重要基礎。隨著互聯網技術的發展,越來越多的氣象數據以 XML 格式在網絡上公開。XML(可擴展標記語言)因其結構化和自描述性的特點,成為數據交換的標準格式之一。然而,這些數據通常分散在不同的…

中小企業無線局域網絡搭建與優化指南

1. 引言&#xff1a;無線網絡——驅動中國中小企業數字化轉型的引擎 無線網絡已成為現代企業運營的基礎設施&#xff0c;直接影響員工工作效率和客戶體驗。隨著Wi-Fi7技術的成熟和普及&#xff0c;中小企業網絡建設正迎來全新機遇。在數字經濟浪潮席卷全球的今天&#xff0c;無…

【已解決】python的kafka-python包連接kafka報認證失敗

先說原因&#xff1a;安裝python包的時候&#xff0c;多裝了一個kafka的包&#xff1a;kafka 1.3.5 我把py文件打包成二進制文件&#xff0c;在linux上執行就一直報認證失敗&#xff0c;后來確認登錄信息、認證方式沒有問題&#xff0c;把這個kafka包卸載…

傳輸層協議TCP(下)

上一篇https://blog.csdn.net/Small_entreprene/article/details/148193741?sharetypeblogdetail&sharerId148193741&sharereferPC&sharesourceSmall_entreprene&sharefrommp_from_link 接下來&#xff0c;我們來談論TCP具體的機制&#xff01; 具體TCP機制 …

洛谷B3612 【深進1.例1】求區間和

題目描述 給定 n 個正整數組成的數列 a1?,a2?,?,an? 和 m 個區間 [li?,ri?]&#xff0c;分別求這 m 個區間的區間和。 輸入格式 第一行&#xff0c;為一個正整數 n 。 第二行&#xff0c;為 n 個正整數 a1?,a2?,?,an? 第三行&#xff0c;為一個正整數 m 。 接下…

debian12 修改MariaDB數據庫存儲位置報錯

debian12 修改MariaDB數據庫存儲位置到home報錯 MariaDB 修改存儲路徑后啟動失敗問題解決 更改數據存儲位置 如果需要將數據存儲到其他位置&#xff08;如更大的分區&#xff09;&#xff1a; 停止 MariaDB 服務&#xff1a; bash sudo systemctl stop mariadb 創建新目錄并設…