Vue Router頁面路由初次體驗 — 安裝與使用

Sean Yeh
Web Design Zone
Published in
8 min readOct 20, 2021
Wanaka Tree, Wanaka, New Zealand, photo by Sean Yeh

如同前面章節介紹過的,Vue.js 的核心是用來處理「狀態」與「網頁模板」的映射關係。

當整個網站逐漸發展成為應用程式的時候,Vue.js 元件、甚至是頁面之間切換的流程、狀態的邏輯,若要使用原本我們所熟悉的v-if、:is指令,就顯得有些力不從心。

要了解Vue Router,就需要從「路由」開始。

什麼是路由

當我們從一個網頁上點選超連結,到達下一個網頁。在瀏覽器上面可以觀察到網址列顯示的文字,會不斷地切換。例如從 http://www.abc.com/index.htm 切換到 http://www.abc.com/news.html時,這種切換過程就是路由。由於網站伺服器透過網址的不同,決定什麼時候該提供什麼資料給使用者。

現在路由可分為後端路由與前端路由:

後端路由vs前端路由

當使用者在瀏覽器上不斷藉著點選超連結,或者是變更路徑的方式切換不同的網址,此時瀏覽器就會依照給定的不同的網址,向後端的網頁伺服器發送請求 (Request),而伺服器接收到瀏覽器給的請求後,就會回應相對應的內容給瀏覽器,讓瀏覽器將內容渲染出來,以上的機制就稱為網站路由。這是傳統後端路由的概念。這種也就是後端路由,或稱為伺服器端路由(Server-side Routing)

後端路由

相對於前面的後端路由,前端路由除了在第一次載入時向伺服器提出請求外,網頁載入後的後續頁面切換,都不透過伺服器而是在瀏覽器端進行。一般稱呼這種網頁為SPA(Single Page Application)。Vue Router即屬於這個範疇。

前端路由

Vue Router

Vue Router 是 Vue.js 官方提供的前端路由管理器。截至目前來說最新版本為 v4.0.12。在使用上要注意的是由於Vue3.0的底層已經改寫過,而 Vue Router v3 以前的版本無法支援新版的 Vue ,請使用Vue Router v4.x的版本,若您的專案目前仍使用的是 Vue 2.x 版本,請務必選用 Vue Router v3.x 。

安裝Vue Router

依照情境有下面幾種安裝方式。

  • Vue Cli安裝
  • 事後追加安裝
  • CDN安裝

以下分別說明。

1.透過Vue Cli安裝

如果您是在建立新專案的時候已經確定要使用Vue Router時,可以利用這一篇介紹VueCli建立專案,並且在過程中(文章中「步驟2」的地方)選擇Router選項。

選擇了Router選項後, Vue CLI 會問你是否採用history模式,如果選擇Y,表示專案會採用history API來管理。Vue Router預設的模式為hash 模式( # ),這表示網址會使用URL 的hash來模擬一個完整的URL,如果不想要很醜的hash,我們可以用路由的 history 模式。實際安裝的細節可以參考這一篇「使用Vue Cli 建立Vue Router 專案」說明。

2.事後追加Vue Router

如果您是在建立專案之後,才決定要增加路由的功能。已透過Vue Cli建立的Vue專案,在這時候由於尚未具備Vue Router的安裝。可以在終端機裡面執行下面的指令:

vue add router@next

請注意,若在router後面加上『 @next 』,即可安裝最新版本的Vue Router。

若尚未安裝VueCli時,也可以透過下面方式安裝:

npm install --save vue-router@next

3.使用CDN安裝Vue Router

除了上面的方式外,也可以使用CDN的方式直接引入Vue Router。

<script src="<https://unpkg.com/vue-router@4>"></script>

以上幾個安裝的方式,大家可以依照個案需求,選擇適當的方式來安裝。

開始使用Vue Router

基本配置流程

在使用上可以分為HTML與JavaScript兩個部分的基本配置方式:

JavaScript部分

在這個部分,我們需要依照下面的順序逐步的進行:

  1. 定義個頁面的Vue元件;
  2. 定義路徑與前面Vue元件的關係;
  3. 初始化並建立Vue Router物件;
  4. 將Vue Router物件添加入Vue實例中。

以下就使用Vue CDN與Vue Router CDN的狀況做為例子,如果想要暸解在Vue Cli下面建立Vue Router 的情形,後續將撰文說明:

## 定義個頁面的Vue元件

假設網站需要一個「關於我們」的單元,可以使用下面方式定義一個物件。

const About ={ template: 
`<div>
<h1>關於我們</h1>
<p>歡迎來到我們的網站。</p>
</div>`
}

為了方便說明,在這裡將About物件簡化為只呈現一個標題與一小段內文的模板。

## 定義路徑與前面Vue元件的關係

接著我們使用一個array陣列,來定義路徑與前面元件的關係。這個陣列可以取名為 routes(習慣上採用複數 s 命名,代表陣列中有很多route物件,雖然在這裡只示範一個,未來可以依照同樣方式增加更多的對應關係)

routes = [{name: 'About', path: '/about', component:About}]

在定義時,每個route物件可以有三組key-value值。包括name、path與component。name為路由的名稱,可以使用名稱指定路由。path為URL位置。component為當到達指定URL時,需要對應的元件。

# 初始化並建立Vue Router實例

建立一個router實例。並且將上一步的 routes 陣列加入這個物件裡面。

const router = new VueRouter({
routes
})

router實例中的 routes為routes: routes的簡稱。除了將routes陣列加入實例之外,您也可以加上其他的 options。例如:mode、base、fallback、linkActiveClass、linkExactActiveClass、scrollBehavior 等options(如下表)。

# 將Vue Router實例添加入Vue實例中

最後我們要將Vue Router實例添加入Vue實例中。下面以Vue2.x為例:

new Vue({  el:'#app',
router,
data:{
略...
}
})

可以直接將步驟三的router實例加進Vue實例中。

HTML部分

HTML為使用者介面,在這裡會用到下面的兩個標籤:

  • <router-link>:用來指定路徑,
  • <router-view>:用來顯示內容。

安裝了 Vue Router 之後,接著我們需要在網頁加入<router-view>來當作 Route 的進入點,並且使用<router-link>來產生對應的連結。

<router-link>中使用to屬性用來處理目標URL,<router-link>在經過編譯之後,會變成<a>標籤。<router-view>則是用來渲染內容的地方。使用方式如下:

<router-link to="/about" class="nav-link">關於我們</router-link>

在to的地方除了直接指定route的路徑 (route path)外,也可以指定route的名稱(route name)。

<router-link :to="{name:'About'}" class="nav-link">關於我們</router-link>

請注意,當指定的是route的名稱時,在這種狀況下 to 就需要採用v-bind的方式( :to="{name:'About'}" )。

接著,<router-view> 要放在 id為app 的<div>元素裡面。#app 為Vue實例掛載的位置( el:'#app' )。

<div id="app">
略...
<router-view></router-view>
略...
</div>

如此設定後,一旦使用者點選<router-link>,就會透過router將對應結果顯示在<router-view>的地方。(這<router-view> 給人的感覺就像是html裡面的iframe功能,然而透過iframe拉進來的頁面本身,仍然是一個完整的HTML檔案,有<head><body>。)

結語

router的概念對於前端來說越顯重要,SPA可說是建立在router的基礎上。本篇僅說明了Vue Router的基礎功能,可以說只是Vue Router的起手式。然而在這Vue2.x與Vue3.x專案並存的時代裡,對於初次使用者來說,還是會有些搞不清楚。在此特別整理一下,藉以提醒自己在使用Vue Router時不要用錯。後續也將繼續介紹Vue Router其他的進階功能。

--

--

Sean Yeh
Web Design Zone

# Taipei, Internet Digital Advertising,透過寫作讓我們回想過去、理解現在並思考未來。並樂於分享,這才是最大贏家。