Skip to content

Vue Router 完全入門:建構流暢的單頁應用 (SPA) 導航

Vue Router 介紹:createRouter 與 SPA 導航

在現代前端開發中,Vue Router 是 Vue.js 官方提供的路由管理器。它將瀏覽器的 URL 與 Vue 元件綁定,讓開發者能在 單頁應用(SPA, Single-Page Application) 中,實現 不重新整理頁面 就能切換內容的流暢體驗。

為什麼需要 Vue Router?

傳統網頁在切換頁面時需要向伺服器請求整個 HTML 檔案,這會造成畫面閃爍與載入延遲。而 Vue Router 的核心特徵在於:

  • 無刷新切換:僅替換頁面中的局部元件。
  • 狀態同步:當 URL 更新時,畫面自動更新;當畫面切換時,URL 也隨之同步。
  • 優化使用者體驗:提供類似原生 App 的操作手感。

傳統多頁式與 SPA 的差別

項目傳統多頁式(MPA)單頁應用(SPA)
換頁方式向伺服器要一份新的 HTML前端替換元件,不再請求頁面
畫面感受有白畫面與閃爍順暢,接近原生 App
首次載入每頁各自載入,較輕需先載入應用程式,較重
前端狀態換頁後全部重置換頁後仍保留在記憶體中
SEO天生友善需 SSR 或預渲染輔助

SPA 不是永遠比較好

換頁順暢的代價是 首次載入較重SEO 需要額外處理。內容型網站(例如:官網、部落格)通常會搭配 SSR 或靜態生成;後台系統、會員中心這類重互動的應用,SPA 才是甜蜜點。

Vue Router 的核心功能

  • 靜態路由 (Static Routes):也就是 URL → 對應 View 元件,當網址改變時 <router-view /> 會自動渲染對應的畫面。例如:/about 對應 About.vue。當網址改變時,<router-view /> 標籤會自動渲染對應元件。
  • 動態路由 (Dynamic Route Matching): 與上述類似,只是在 URL 中帶有變數、參數的路由。常用在使用者、商品、訂單、文章頁面。例如:/user/:id
  • 巢狀路由 (Nested Routes): 在一個路由底下,再定義子路由,形成父子頁面結構。簡單講就是,頁面裡面還有子頁面
  • 導航守衛 (Navigation Guards): 路由的攔截器。主要用於 權限控管,例如:判斷使用者是否已登入,若未登入則跳轉至登入頁面。

兩個核心元件

Vue Router 在畫面上其實只靠兩個元件運作:

  • <router-link>:渲染成 <a> 標籤,但會 攔截點擊 改由前端切換,不會重新載入整個應用程式。
  • <router-view>:目前路由對應的元件會被渲染在這個位置,可以想成頁面的 顯示區

若把 <router-link> 換成一般的 <a href="/about">,瀏覽器會重新請求頁面,SPA 累積的狀態也會全部歸零。

標準專案檔案結構

為了確保程式碼的可維護性,建議遵循 Vue 官方建議的結構,將路由配置與頁面元件分離:

src/
 ├─ router/
 │   └─ index.js      # 路由配置核心,僅存放路由對應表,不寫業務邏輯
 ├─ views/            # 存放頁面級元件(對應一個完整網址的元件)
 │   ├─ Home.vue
 │   └─ About.vue
 ├─ App.vue           # 頂層元件,通常包含 <router-view />
 └─ main.js           # 專案進入點,在此掛載 Router
  • router/: 只會放路由相關設定,不放 API、商業邏輯。
  • views/: 頁面相關的元件,也就是可以對應一個 URL 的元件。

至於被多個頁面重複引用的小元件,則放在 components/,這也是判斷 元件 該擺哪裡的簡單標準:能對應網址的是 view,被引用的是 component

如何安裝 Vue Router?

您可以透過 npm 快速將 Vue Router 整合進您的專案中:

bash
npm install vue-router
# 或簡寫
npm i vue-router

安裝後還需要在 建立應用程式 的進入點以 app.use(router) 掛載,完整步驟會在 靜態路由 一併示範。

總結

Vue Router 是建構現代化網頁應用的基石。透過統一的路由管理,我們不僅能讓專案結構更清晰,還能輕鬆處理複雜的權限驗證與動態內容渲染。在接下來的章節中,我們將深入探討如何撰寫第一個 router/index.js 配置檔!

常見問題

什麼是單頁應用 SPA?

整個網站只載入一份 HTML,之後換頁由前端在瀏覽器中替換元件完成,不再向伺服器要新的頁面。優點是切換順暢,代價是首次載入的檔案較大。

router-link 和 a 標籤差在哪裡?

<router-link> 最終也會渲染成 <a> 標籤,但它會攔截點擊改由前端切換,不會重新載入整個應用程式。直接寫 <a> 標籤會讓瀏覽器重新請求頁面,SPA 的狀態也會全部重置。

views 和 components 目錄該怎麼分?

能對應一個網址的頁面級元件放 views,被頁面重複引用的小元件放 components。這樣看目錄就知道哪些檔案會出現在路由表裡。

Vue Router 需要另外安裝嗎?

需要,它不包含在 vue 套件裡,要用 npm install vue-router 安裝。若用 create-vue 建立專案時勾選了路由選項,指令與設定檔都會自動幫你準備好。

SPA 對 SEO 有影響嗎?

純前端渲染的內容需要爬蟲執行 JavaScript 才看得到,對 SEO 較不利。重視搜尋流量的網站通常會改用 SSR 或靜態生成,讓伺服器直接輸出完整 HTML。

延伸閱讀