[ Vue.js ] 路由 : Vue Router

Select *
Program
Published in
Jul 18, 2021

Vue Router為Vue官方提供的路由管理器,讓前端頁面可以操作route。
本篇將利用router-link與router-view讓頁面可以透過左側選單(side navigation bar)來切換右側子頁面內容,並以$route.params傳遞參數。

步驟

  • 安裝Vue Router
  • 建立Layout頁面
  • 建立view頁面
  • 設定route

最後的成品如下:

安裝Vue Router

使用Vue CLI安裝Vue Router。

開啟終端機,輸入:
vue add router@next

顯示是否使用 history mode 輸入Y,Enter繼續執行安裝。

一直跑到出現 successfully,即安裝完畢。

安裝完畢後,可以看到增加一些資料夾與檔案。

router資料夾與index.js檔案

index.js引入了vue-router,並建立routes來定義路由。
可以看到routes中定義了兩個路由。

{
path: "/",
//設定路徑為"http://localhost/"
name: "Home",
//設定名稱為Home
component: Home,
//設定component來源
},
{
path: "/about",
//設定路徑為"http://localhost/about"
name: "About",
//設定名稱為About
component: import(../views/About.vue),
//設定component來源
}

routers裡所設定的component即為子頁面(router-view)所想要顯示的內容,如果component設定為"../views/About.vue",那麼內容就會顯示src/views/About.vue這個檔案的內容。

最後,宣告 router為createRouter()建立路由,並將router輸出(export),讓其他頁面可以引入router作為元件使用。

//createRouter為設定路由的method
const router = createRouter({
//將history設定為createWebHashHistory()
history: createWebHistory(process.env.BASE_URL),
//routes為routes: routes的縮寫
routes,
});
src/router/index.js

views資料夾與兩支vue檔案

src/views資料夾底下的vue檔案為路由中component所對應的實體檔案。

src/views/Home.vue
src/views/About.vue

App.vue

App.vue也跟原本不一樣了,多了<router-link/>與 <router-view />標籤。

<router-link/>
設定to屬性來指定路由。(router-link還有其他很多種屬性可以使用,可以參考這邊)

<router-view/>
用來顯示路由所對應到的components(views資料夾底下的vue檔案)。

src/App.vue

main.js

引入了router資料夾,並在createApp(App)時,多加了.use(router)。
語法是指,在建立Vue時,把前面src/router/index.js所定義的router加進Vue裡,這樣之後便可以使用設定好的路由讓Vue專案使用。

src/main.js

執行後可以看到,上方多了兩個連結,分別是Hoem與About,點選後可以切換Home與About畫面。

接下來,來建立自己的首頁與選單menu,來切換顯示內容。

建立Layout

建立一個Layout做為首頁,首頁包含了Header、左側選單、右側內容。

在src/assets資料夾加入圖片,命名為icon.png,用來做header的icon圖片。

在src底下新增Layout.vue檔案,並加入<router-link/>指定路由的路徑,以及<router-view>用來顯示路由所對應到的component。

程式碼如下:

src/Layout.vue

接著,開啟src/main.js,調整App from 為"./Layout.vue",讓首頁為Layout.vue。

src/main.js

這時候執行,會看到如下畫面:

建立view

建立三個view頁面,做為子頁面的顯示內容。

在src/views資料夾底下新增子頁面,Nav1.vue、Nav2.vue、Nav3.vue。
給route的component使用。

src/views/Nav1.vue
src/views/Nav2.vue
src/views/Nav3.vue

設定route

設定路由與要對應的component。

開啟src/router/index.js,分別引入views/Nav1.vue、views/Nav2.vue、views/Nav3.vue,並設定這三個畫面所對應的路徑。
最後,createRouter並輸出(export)。

src/router/index.js

執行畫面

起始畫面如下。

點選連結1,顯示src/views/Nav1.vue的內容。

點選連結2,顯示src/views/Nav2.vue的內容。

點選連結3,顯示src/views/Nav3.vue的內容。

後記

route除了傳遞路徑外,也可以設定路徑參數,讓母頁面可以傳遞參數給子頁面接受。

來源:https://router.vuejs.org/guide/essentials/dynamic-matching.html

pattern

開啟src/route/index.js,將routes中的path參數做調整。
在路徑後面多加/:參數名稱讓路由知道路徑中會包含參數。

以下是設定路徑最後會包含一個名為title的參數。

src/router/index.js

matched path

開啟src/Layout.vue,將<router-link/>的to屬性作調整,在原本的路徑後方加上/"想傳入的參數值"

以下是分別設定參數為連結1連結2連結3

src/Layout.vue

$route.params

開啟src/views資料夾底下的Nav1.vue、Nav2.vue、Nav3.vue。
調整以{{ $route.params.title }},來抓取路徑中的title參數並顯示。

src/views/Nav1.vue
src/views/Nav2.vue
src/views/Nav3.vue

執行後,點選連結即可看到調整後的內容。

--

--