試寫了幾篇文章後,也會想為網站新增一些特別的頁面,像是文章列表、關於等,可能會需要用到 Vue Component 去做一些特殊功能的頁面。但目前我們就只會顯示有在 @/content/
目錄下新增 Markdown 文件的內容,那我們就會這些特殊頁面做點前置準備與說明吧。
在 Nuxt 的概念裡,是路徑即路由,我在 @/pages/
下新增什麼 Vue Component,網址就會是其檔案名稱。例如,我新增了 @/page/ariticles.vue
,那就可以透過 localhost:3000/articles
去訪問。
但這時候回去看 Nuxt Content 的專案,裡面其實也就只有一個 [...slug].vue
的頁面,那我新增的內容,怎麼有辦法被訪問到呢?其實 [...slug]
這個檔名,就是告訴 Nuxt 說,只要是沒有存在其檔案的路徑,都使用這個 Vue Component 渲染。這也就是為什麼我們不用另外建立頁面去顯示內容的緣故。
開啟 [...slug].vue
來看其程式碼:
<template>
<main>
<ContentDoc />
</main>
</template>
而其中的 <ContentDoc />
就是指渲染對應到 @/content/
相同路徑下的 Markdown 檔案。
例如,我訪問了路徑 localhost:3000/about/me
,那麽透過 Nuxt 機制,因為我的 pages
下並沒有相關對應的 Vue Components,那我就會改用 [...slug].vue
去渲染,並藉由 <ContentDoc />
去渲染 @/content/about/me.md
的檔案。
我也可以新增其頁面,像是建立 @/pages/about/me.vue
,並編寫程式碼如下:
<template>
<main>
<h1>About Me</h1>
<ContentDoc />
</main>
</template>
那相比其他沒有 Vue Component 的路徑,我在訪問 localhost:3000/about/me
就會自帶一個 About Me 的標題,再去渲染 @/content/about/me.md
的檔案。
實際訪問時,發現多了一個內文:
Document not found, overwrite this content with #not-found slot in <ContentDoc>.
那就是指 <ContentDoc />
元件並沒有找到這個檔案 @/content/about/me.md
,只要新增該檔案與內容即可。
若是只新增檔案沒有內容,依然會有類似的錯誤。
新增些許內容後就會正常顯示了。