最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3集成Vue Router從基礎配置到項目實踐的完整指南

 更新時間:2026年05月21日 09:21:15   作者:叫我少年  
如何在項目中實現(xiàn)頁面切換,而不用每次都重新加載整個頁面?答案就是 Vue Router,這篇就來聊聊 Vue Router 4.x 在 Vue 3 中的集成與使用,需要的朋友可以參考下

引言

如何在項目中實現(xiàn)頁面切換,而不用每次都重新加載整個頁面?答案就是 Vue Router。這篇就來聊聊 Vue Router 4.x 在 Vue 3 中的集成與使用,分析它的基礎配置、路由守衛(wèi)和懶加載等核心概念到底是怎么回事。

  1. Vue Router 與 SPA:它是什么,解決了什么問題?
  2. 基本用法:如何安裝、配置、掛載,并在組件中使用。
  3. 高級用法:路由守衛(wèi)、懶加載、嵌套路由與參數(shù)傳遞。
  4. 常見問題與注意事項:入坑必知的幾個要點。

一、什么是 Vue Router?有什么作用?

Vue Router 是 Vue.js 的官方路由管理器,用于構建單頁面應用程序(SPA) 。它通過監(jiān)聽 URL 的變化,動態(tài)地切換頁面中顯示的內(nèi)容組件,而無需重新加載整個網(wǎng)頁,從而實現(xiàn)流暢的用戶體驗。

1.1 核心使用場景

  • 構建單頁面應用程序(SPA)
  • 需要前端路由管理的項目,例如后臺管理系統(tǒng)、多頁面應用
  • 需要實現(xiàn)頁面導航路由守衛(wèi)(權限控制)和懶加載(按需加載)等功能
  • 需要基于路由的參數(shù)傳遞狀態(tài)管理

1.2 常見坑:版本匹配問題

Vue Router 4.x 專為 Vue 3 設計,不兼容 Vue 2。如果項目是 Vue 2,請使用 Vue Router 3.x。這是一個新手最容易踩的坑。

二、基本用法:最小配置與核心概念

先給結論:引入 Vue Router 主要分三步——安裝配置路由、掛載到應用。下面具體拆解一下。

第一步:安裝

根據(jù)你的包管理器選擇一種方式安裝:

npm install vue-router@4
# 或者
yarn add vue-router@4
# 或者
pnpm add vue-router@4

第二步:配置路由實例

src? 目錄下創(chuàng)建 router/index.ts 文件。這是整個應用路由的配置中心。

// src/router/index.ts
import { createRouter, createWebHistory, type RouteRecordRaw } from 'vue-router'

// 1. 定義路由配置
const routes: Array<RouteRecordRaw> = [
  {
    path: '/',
    name: 'Home',
    component: () => import('@/views/HomeView.vue') // 使用懶加載
  },
  {
    path: '/about',
    name: 'About',
    component: () => import('@/views/AboutView.vue')
  },
  {
    path: '/user/:id',
    name: 'User',
    component: () => import('@/views/UserView.vue'),
    props: true // 將路由參數(shù)作為 props 傳遞給組件
  }
]

// 2. 創(chuàng)建路由實例
const router = createRouter({
  history: createWebHistory(), // 使用 HTML5 History 模式
  routes
})

export default router

代碼解析:

  1. ??createRouter?? 和 createWebHistory?:這是創(chuàng)建 Vue Router 實例的兩個核心 API。createRouter? 接收一個配置對象,createWebHistory? 表示啟用 history 模式。
  2. ??component: () => import(...)? ?:這是路由懶加載的標準寫法。它告訴 Vue Router 在用戶首次訪問 /about? 路由時,才去加載 AboutView.vue 組件,而不是在應用啟動時就加載所有頁面。這能顯著提升首屏加載速度。
  3. ??props: true??:將 :id 等路由參數(shù)直接以 props 的形式注入到組件中,讓組件更純粹,方便測試和復用。

第三步:掛載到 Vue 應用

main.ts 中將創(chuàng)建好的路由實例掛載到 Vue 應用上。

// main.ts
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'

const app = createApp(App)
app.use(router) // 掛載路由插件
app.mount('#app')

第四步:在組件中使用

App.vue? 或其他組件中,使用 <router-link>? 進行頁面跳轉,使用 <router-view> 作為頁面內(nèi)容的占位符。

<template>
  <div>
    <nav>
      <router-link to="/">首頁</router-link>
      <router-link to="/about">關于</router-link>
      <router-link :to="{ name: 'User', params: { id: 123 }}">用戶頁面</router-link>
    </nav>

    <!-- 路由出口:匹配到的組件將在此渲染 -->
    <router-view />
  </div>
</template>

<script lang="ts" setup>
import { useRouter, useRoute } from 'vue-router'

// 獲取路由實例和當前路由對象
const router = useRouter()
const route = useRoute()

// 編程式導航(通過代碼跳轉)
const goToAbout = () => {
  router.push('/about')
  // 或者使用命名路由
  // router.push({ name: 'About' })
}

// 帶參數(shù)的跳轉
const goToUser = (id: number) => {
  router.push({ name: 'User', params: { id } })
}

// 替換當前路由(不會在瀏覽器歷史中留下記錄)
const replaceRoute = () => {
  router.replace('/about')
}

// 前進后退
const goBack = () => router.go(-1)
const goForward = () => router.go(1)
</script>

三、路由守衛(wèi)與懶加載實踐

在真實的項目中,我們通常需要更復雜的配置,例如全局的權限控制、全局的進度條加載動畫和嵌套路由。

3.1 路由模式

模式核心原理優(yōu)點缺點適合場景
hash 模式 (createWebHashHistory)URL 中以 #/about? 形式呈現(xiàn),# 后的變化不會觸發(fā)服務器請求無需服務器配置,兼容性好URL 不夠美觀,有 # 符號靜態(tài)站點、簡單演示項目
history 模式 (createWebHistory)URL 是正常的 /about 形式,模擬傳統(tǒng)網(wǎng)站URL 美觀,用戶體驗好需要服務器配置,否則刷新頁面會 404生產(chǎn)環(huán)境、需要 SEO 的項目

劃重點: 在正式項目中,推薦使用 history 模式,但一定不要忘記在 Nginx、Apache 等服務器上配置 try_files $uri $uri/ /index.html?,否則用戶直接訪問 /about 頁面時會返回 404。

3.2 高級配置:集成路由守衛(wèi)與進度條

這個示例展示了更完整的項目級配置:將路由配置分離,并在路由守衛(wèi)中集成全局進度條。

// src/router/index.ts
import { createRouter, createWebHistory } from 'vue-router'
import routes from './routes' // 路由配置單獨管理
import NProgress from 'nprogress'

const router = createRouter({
  history: createWebHistory(),
  routes
})

/**
 * 全局前置守衛(wèi)
 * 作用:在每次路由跳轉前執(zhí)行,用于控制訪問權限、設置頁面標題、開啟進度條等。
 */
router.beforeEach((_to, _from, next) => {
  NProgress.start() // 開啟頁面頂部進度條
  // 這里可以做權限驗證,例如檢查 token 是否存在
  // if (to.meta.requiresAuth && !isLoggedIn) { next('/login') }
  // else { next() }
  next()
})

/**
 * 全局后置守衛(wèi)
 * 作用:在路由跳轉完成后執(zhí)行,用于關閉進度條、埋點上報等。
 */
router.afterEach(() => {
  NProgress.done() // 關閉進度條
})

export default router

路由守衛(wèi)的核心邏輯是 next()? 函數(shù)。切記:在每個判斷分支都一定要調用 next(),否則頁面會卡住。這是新手最常犯的錯誤。

3.3 路由配置分離(示例)

將路由配置獨立成文件 src/router/routes.ts,方便管理和擴展。

// src/router/routes.ts
import { type RouteRecordRaw } from 'vue-router'

const routes: RouteRecordRaw[] = [
  {
    path: '/index',
    name: 'index',
    component: () => import('../components/Homepage.vue'),
    meta: { keepAlive: true }, // 自定義元數(shù)據(jù)
    children: [
      {
        path: 'article',
        name: 'article',
        component: () => import('../views/page/article/index.vue')
      }
    ]
  },
  {
    path: '/',
    redirect: { name: 'index' } // 重定向
  }
]

export default routes

3.4 組件級別的路由出口與 keep-alive

當使用 <router-view>? 時,可以結合 Vue 的 <keep-alive> 組件,實現(xiàn)頁面狀態(tài)的緩存(例如避免表單位置丟失)。

<template>
  <div id="app">
    <router-view v-slot="{ Component }">
      <!-- 當路由的 meta 中 keepAlive 為 true 時,緩存組件 -->
      <keep-alive>
        <component :is="Component" v-if="$route.meta.keepAlive" />
      </keep-alive>
      <!-- 否則不緩存 -->
      <component :is="Component" v-if="!$route.meta.keepAlive" />
    </router-view>
  </div>
</template>

四、路由高級用法:嵌套路由與參數(shù)處理

4.1 嵌套路由

嵌套路由用于構建頁面內(nèi)部的子導航,比如一個后臺管理系統(tǒng)的側邊欄內(nèi)容。在上面的 routes.ts? 示例中,children? 數(shù)組就是嵌套路由的用法:訪問 /index/article? 時,ArticleView? 組件會渲染在父組件 Homepage.vue? 的 <router-view> 中。

4.2 動態(tài)路由參數(shù)與監(jiān)聽變化

當路由參數(shù)變化時(比如從 /user/1? 跳轉到 /user/2?),組件實例會被復用,這意味著組件的 created? 或 mounted? 鉤子不會再次執(zhí)行。此時,你需要監(jiān)聽 ?route?? 對象的變化來獲取新的參數(shù)并獲取數(shù)據(jù)。

<script setup>
import { useRoute } from 'vue-router'
import { watch } from 'vue'

const route = useRoute()

// 監(jiān)聽路由參數(shù)的變化
watch(() => route.params.id, (newId, oldId) => {
  console.log('用戶 ID 從', oldId, '變?yōu)?, newId)
  // 在這里調用獲取用戶詳情數(shù)據(jù)的 API
})
</script>

五、常見問題與注意事項

  • 動態(tài)路由參數(shù)變化組件不重新創(chuàng)建:如上文所述,需要通過 watch? 監(jiān)聽 route.params 來響應變化。
  • 路由配置應合理組織:避免過于復雜的嵌套,建議將功能相關的路由放在同一個模塊的 children 中。
  • 路由守衛(wèi)執(zhí)行順序:全局守衛(wèi)(global.beforeEach?)→ 路由配置守衛(wèi)(beforeEnter?)→ 組件內(nèi)守衛(wèi)(beforeRouteEnter)。理解這個順序對權限控制至關重要。
  • props 傳參:推薦在配置路由時啟用 props: true,這能讓組件與路由解耦,更易于測試和維護。

最后

Vue Router 是 Vue 3 生態(tài)中一個穩(wěn)定且強大的核心庫。寫 SPA 項目,99% 的場景都離不開它。記住 版本匹配路由守衛(wèi)的 next 這兩個關鍵點,基本就能應對大多數(shù)日常開發(fā)了。

以上就是Vue3集成Vue Router從基礎配置到項目實踐的完整指南的詳細內(nèi)容,更多關于Vue3集成Vue Router的資料請關注腳本之家其它相關文章!

相關文章

  • vue更改數(shù)組中的值實例代碼詳解

    vue更改數(shù)組中的值實例代碼詳解

    這篇文章主要介紹了vue更改數(shù)組中的值,本文通過兩個例子,給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Vue中使用h5 Plus的實現(xiàn)方法

    Vue中使用h5 Plus的實現(xiàn)方法

    這篇文章主要介紹了Vue中使用h5 Plus的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue3.2新增指令v-memo的基本使用教程

    vue3.2新增指令v-memo的基本使用教程

    ue3.2新增了一個指令v-memo,引入這個指令的目的是幫助大家更好的為我們的應用做性能優(yōu)化,下面這篇文章主要給大家介紹了關于vue3.2新增指令v-memo基本使用的相關資料,需要的朋友可以參考下
    2022-09-09
  • 詳解Vue 全局變量,局部變量

    詳解Vue 全局變量,局部變量

    這篇文章主要介紹了Vue全局變量局部變量,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Vue數(shù)組響應式操作及高階函數(shù)使用代碼詳解

    Vue數(shù)組響應式操作及高階函數(shù)使用代碼詳解

    這篇文章主要介紹了Vue數(shù)組響應式操作及高階函數(shù)使用代碼詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • vue 計時器組件的實現(xiàn)代碼

    vue 計時器組件的實現(xiàn)代碼

    本篇文章主要介紹了vue 計時器組件的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 深入了解Vue3 中 this的使用

    深入了解Vue3 中 this的使用

    在Vue3中,this的使用方式與Vue2存在較大差異,尤其是在引入組合式API后,本文詳細解析了Vue3中this的使用情況、底層源碼和設計理念,并提供了面試技巧,感興趣的可以了解一下
    2024-09-09
  • 解決vue項目使用font-awesome,build后路徑的問題

    解決vue項目使用font-awesome,build后路徑的問題

    今天小編就為大家分享一篇解決vue項目使用font-awesome,build后路徑的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue3 style CSS 變量注入的實現(xiàn)

    Vue3 style CSS 變量注入的實現(xiàn)

    本文主要介紹了Vue3 style CSS 變量注入的實現(xiàn),文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • vue+vant移動端顯示table表格加橫向滾動條效果

    vue+vant移動端顯示table表格加橫向滾動條效果

    vant移動端顯示table效果,增加復選框,可以進行多選和全選,加橫向滾動條,可以看全部內(nèi)容,下面通過本文給大家分享vue+vant移動端顯示table表格加橫向滾動條效果,感興趣的朋友跟隨小編一起看看吧
    2024-06-06

最新評論

吴川市| 唐河县| 博白县| 普定县| 太仆寺旗| 永寿县| 蒙城县| 南和县| 景泰县| 微博| 金湖县| 湘潭市| 社会| 临洮县| 丰镇市| 莎车县| 韶山市| 包头市| 开江县| 平潭县| 屏东市| 岚皋县| 泰和县| 荃湾区| 长阳| 绩溪县| 张家川| 德清县| 邵东县| 华池县| 三门县| 伊金霍洛旗| 响水县| 金寨县| 广昌县| 彭山县| 化隆| 太原市| 梨树县| 广水市| 渭源县|