用 Vue Router 實作網頁切換(中)

延續上個章節,學習 Nested Routes

Jacy Chu
6 min readJun 9, 2021

📝 回顧上個章節:用 Vue Router 實作網頁切換(上)
搭建好 Vue Router 專案環境並新增自定義頁籤 Travels
這章節將延續上個章節,為專案新增客製化樣式,並延伸介紹嵌套路由!

📋 目錄

  1. [實作] 客製化 Home.vue & About.vue 頁面
  2. Nested Routes 嵌套路由介紹
  3. [實作] 調整 Travels.vue 嵌套路由
  4. [實作] 客製化 Travels.vue 頁面

[實作] 客製化 Home.vue & About.vue 頁面

step 1 改變 Router Link 的顏色

有關 routers 都寫在 App.vue 檔案,下方 style 中 #nav a & #nav a.router-link-exact-active 可依個人喜好修改 🔮

這邊改成 #302e28 #998f7f ,分別是深淺咖啡色。

step 2 調整 Home.vue 頁面

Home.vue 頁面 <template> 區塊把 img,HelloWorld 元件以及整個 <script> 刪除。此時查看瀏覽器 Home 畫面會是空的。

Unsplash 網站下載 圖片素材,將圖片放置專案 src/assets 資料夾中,並將其重新命名為 world-map.jpg 📍

🔖 補充說明
Unsplash提供免費且無著作權的高解析度圖片,使用者不用標註原作者名稱,個人專案或商業使用皆可自由選擇Unsplash所提供的免費圖片。

Home.vue 加上圖片以及設定樣式。

Home 頁面完成,可以縮放視窗大小。雖然沒有細緻的響應式設計(RWD),不過此系列文章著重在 Vue router 學習,基本樣式看起來還不錯 👏

step 3 調整 About.vue 頁面

目前的 About 頁面只有預設的一行字。 Travels 專案主要記錄個人旅遊足跡,所以將說明修改成符合主題,並加上一句名言。

About 頁面完成,由於沒有新增樣式設定,畫面屬於簡約風 🗿

Nested Routes 嵌套路由介紹

路由設定是讓畫面隨網址渲染到對的頁面。依循上方設定,header 區塊是固定保持顯示的區塊,而<router-view /> 即是畫面渲染的內容。

實際生活中的應用界面,通常由多層嵌套的組件組合而成。舉目前的範例,想在 Travels 頁面加上 placeA & placeB 區塊。在原本 Travels 的 router 設定底下加入 children (placeA & placeB 如同 Travels 的小孩) 👶

圖中的 placeA & placeB 色塊即是 <router-view />

Travels.vue 新增 <router-link> & <router-view />

接著分開撰寫 PlaceA & PlaceB 元件,並引用至 router/index.js 中, placeA & placeB 區塊即劃分完成。
下一個部分將實作 Travels.vue 嵌套路由調整。

🔖 補充說明
Redirect:(以上述範例為例)某些情況會希望在進入/travels畫面直接被重新導向/travels/placeA,在設定route的地方,travel區塊加上redirect:"/travels/placeA"即可

[實作] 調整 Travels.vue 嵌套路由

這個部分會先運用剛剛學習的嵌套路由,將網頁的架構切分好,再進行客製化內容的步驟。在開工前,構思 Travels 頁面會有三個小頁籤 📃,分別是:西班牙(Spain)、芬蘭(Finland)、捷克(Czech)。

step 1 新增三個 Vue 頁面檔案

在 components 資料夾中,新增 Spain.vueFinland.vueCzech.vue 檔案。
以下為 Spain.Vue 檔案內容(其他兩個檔案請參考完成)。

step 2 修改 Travels.vue 檔案

將原本 placeA 與 placeB 的 <router-link> 置換成國家,並將 <p> 標籤內容修改。

step 3 修改 index.js 檔案

router/index.js 檔案上方引用三個國家的元件,並將下方 placeA 與 placeB 的 route 設定置換。完整檔案如下:

這邊可以留意一下,在 router 設定 history 模式。
Vue 預設使用 hash 模式,在 URL 會出現 #井字號,較不美觀且不符合 URL 規範。Hash 模式通過錨點值的改變,渲染指定 DOM 位置的不同內容。而在 History 模式,當用戶手動輸入網址或刷新頁面時會發起 URL 請求,需和後端配合。

依循上述步驟,已完成 Travels.vue 的嵌套路由設定。
目前專案的畫面如下:

[實作] 客製化 Travels.vue 頁面

這個樣式部分可以依個人喜好做編輯 👾

step 1 修改 Travel 分頁樣式

新增 div class travel-router,包在三個 <router-link> 外層,並在下方加上樣式設定。

step 2 Spain.vue 新增內容及樣式

新增圖片(圖片來源皆為 Unsplash 網站),設定圖片的大小,加上文字說明。完整程式碼如下:

step 3 Finland.vue 新增內容及樣式

仿製 Spain.vue 的作法,完成 Finland.vue 檔案,完整程式碼如下:

step 4 Czech.vue 新增內容及樣式

仿製 Spain.vue 的作法,完成 Czech.vue 檔案,完整程式碼如下:

依循上述步驟,瀏覽器網址輸入 http://localhost:8080
畫面如下方影片所示 👀 請特別留意 URL 的切換

畫面看起來有內容多了 🙌

在最後一個章節,將會製作404 Not Found Page,以及返回上一頁的按鈕!

🚪 前往下一章節:用 Vue Router 實作網頁切換(下)

Let’s travel together.🌏

--

--