建議這篇文章的讀者先具備 vue-router
的相關知識,會看的比較懂。如果還不熟悉的話,建議可以先認識一下 vue-router
。
Nuxt 的路由其實是使用 vue-router
製作,但他提供更簡易的方法設置,讓你不用自己寫 vue-router
的代碼。
一般路由
首先請在 /pages
下新增一個 info.vue
,隨便寫些內容。
接著到瀏覽器請求 http://localhost:3000/info
,你就會看到 info.vue
的內容。是不是很簡單呢?
假設你的 pages 目錄是長這樣
1 | pages/ |
那麼 .vue
檔案的名稱,就會變成路由的名稱,若想成是 vue-router
的配置的話,他就像底下這樣:
1 | { |
進一步的,如果要製作 /info/detail
這個路由,你的目錄結構要這樣設定:
1 | pages/ |
但是,如果這時候請求 /info
這個路由的話,你會看見 Page not found
的錯誤。
因此,想保持 /info
也有頁面的話:
1 | pages/ |
這樣一來,請求 /info
的時候,就可以看到 /pages/info/index.vue
的內容囉。
練習的小技巧
如果有執行過 npm run dev
的話,專案的根目錄中應該會有一個 .nuxt
資料夾,他是實際運行的 code。
打開後第一層,你就可以看到 router.js
,裏頭就有你目前的路由設置。
你可以一邊修改 pages
目錄,一邊觀察 router.js
的變化。
動態路由
有時候我們希望用相同頁面,根據不同的使用者 ID,顯示出不同的內容。這種時候就可以用到動態路由。
動態路由就是長這樣的東西: /user/_id
。
如果今天使用者請求的是 /user/123
的話,那我們就可以取得 {id: 123}
這樣的資料,再利用這個參數呼叫 API。
這個路由,在 Nuxt 中設置方法是:
1 | pages/ |
如果你希望沒有 id,只進入 /user
的時候也有頁面的話,那麼你可以在 /pages/user
下加上一個 index.vue
1 | pages/ |
進一步的,如果你想要做 /user/:id/info
的時候,則可以把 _id
變成一個目錄:
1 | pages/ |
這個結構對應的 router
設置應該是:
1 | { |
巢狀路由
在一般的 vue-router
的寫法中,巢狀路由是像這樣的:
1 | { |
而在 .vue
中,我們可以用 <router-view>
使用他:
1 | <!-- article.vue --> |
在 Nuxt 中這種路由的目錄結構是:
1 | pages/ |
注意,他同時有 article.vue
還有 article 目錄。
然後在 article.vue 中要這樣設置:
1 | <!-- article.vue --> |
<nuxt-child>
是一個全域元件,不需要註冊就可以使用他
這麼一來就完成巢狀路由囉
結論
以上就是 Nuxt 設置路由的方法,不知道大家覺得好不好用?
有聽說過有人覺得這個設計很多管閒事,要客製化的時候會很麻煩。
不過目前這樣,應該是足夠應付一些基本需求。
而如果你想要更進一步的對 router
做設置的話,你可以參考官方文件,他提供客製化 router
的方法。