D17 - 探索 Nuxt 前端結構:深入理解 app.vue 與 layouts/default.vue

更新於 2024/11/02閱讀時間約 10 分鐘

哈囉,大家好!經過前面的努力,我們已經成功建立了 Nuxt 的開發環境,並初步了解了它的使用方式。在前一篇文章中,我們建立了第一個頁面,並準備好了後續開發所需的套件。現在,是時候深入了解 Nuxt 的前端結構,並開始規劃我們的應用介面了。

今天,我想和大家分享 Nuxt 前端結構與介面規劃,特別是 app.vue 和 layouts/default.vue 之間的關係,以及它們在應用程式中的作用。


一、Nuxt 前端結構概覽

在開始規劃介面之前,理解 Nuxt 的前端結構是非常重要的。Nuxt 以約定大於配置的理念,提供了清晰的目錄結構,讓我們可以更專注於開發本身。

1. 目錄結構回顧

  • pages/:存放頁面組件,Nuxt 會自動根據這裡的檔案生成路由。
  • layouts/:用於定義頁面的佈局,例如導航列、頁腳等。
  • components/:存放可重用的 Vue 元件。
  • plugins/:用於註冊需要在 Vue 實例化之前執行的插件。
  • nuxt.config.js:Nuxt 的主要配置檔案。

2. 關鍵檔案介紹

在 Nuxt 中,app.vue 和 layouts/default.vue 是控制應用程式結構的兩個關鍵檔案。理解它們的作用,能夠讓我們更有效地規劃介面。


二、深入理解 app.vue 與 layouts/default.vue

1. app.vue 的作用

app.vue 是 Nuxt 應用的 全域根組件,它位於整個應用的最外層。所有的頁面和佈局都會被包裹在 app.vue 中。

  • 全域設定:如果你需要對應用的所有部分統一添加一些全域設定(如 、 的全域樣式或腳本),app.vue 是放置這些內容的地方。
  • 結構控制:app.vue 控制整個應用的頂層結構,可以在這裡引入全域性的組件或設置。
    範例:簡單的 app.vue 文件
<template>
<div id="app">
<NuxtLayout />
</div>
</template>

<script setup>
// 這裡可以加入全域性的組件或邏輯
</script>

<style>
/* 全域樣式 */
</style>

在這個範例中, 用來渲染對應的佈局,例如 layouts/default.vue。這意味著每個頁面都會被指定的佈局包裹。

2. layouts/default.vue 的作用

layouts/default.vue 是應用的 預設佈局。如果某個頁面沒有指定特殊的佈局,Nuxt 會自動使用 default 佈局。layouts/default.vue 主要用來定義應用中大多數頁面的佈局,例如導航列、側邊欄、頁腳等。

  • 頁面佈局:在這裡可以統一設計頁面的結構,包含重複出現的部分。
  • 內容插槽:使用 元件來渲染頁面的內容。
    範例:簡單的 layouts/default.vue
<template>
<div>
<Header /> <!-- 自訂的導航列元件 -->
<main>
<NuxtPage />
</main>
<Footer /> <!-- 自訂的頁腳元件 -->
</div>
</template>

<script setup>
// 可以在這裡引入共用的元件
import Header from '~/components/Header.vue'
import Footer from '~/components/Footer.vue'
</script>

<style scoped>
/* 佈局專屬的樣式 */
</style>

在這個範例中,我們在佈局中引入了 Header 和 Footer 元件,並使用 來渲染頁面的具體內容。

3. 主要區別

  • app.vue 是全域的根組件:它包裹了整個應用程式,所有佈局、頁面、插件等都會被包含在 app.vue 中。它相當於 Nuxt 應用的基礎架構。
  • layouts/default.vue 是頁面的佈局:控制頁面在此佈局下的顯示方式。如果你有多個佈局,可以根據頁面需求來切換不同的佈局。

4. 使用情境

  • 全域設定或全域元件:使用 app.vue,例如全域的樣式、插件或狀態管理工具的初始化。
  • 頁面佈局和結構:使用 layouts/default.vue,例如設置導航列、側邊欄、頁腳等。

三、規劃應用程式的介面結構

了解了 app.vue 和 layouts/default.vue 的作用後,我們可以開始規劃我們的應用介面。

1. 設計全域元件

首先,我們可以在 components/ 目錄下建立一些全域性的元件,例如:

  • Header.vue:導航列,包含網站的 LOGO 和主要導航連結。
  • Footer.vue:頁腳,包含版權資訊和相關連結。
  • Sidebar.vue(可選):側邊欄,提供額外的導航或功能選項。

範例:建立 Header.vue

<template>
<header class="bg-blue-600 text-white p-4">
<nav class="container mx-auto flex justify-between">
<h1 class="text-xl font-bold">財務管理系統</h1>
<ul class="flex space-x-4">
<li><NuxtLink to="/">首頁</NuxtLink></li>
<li><NuxtLink to="/transactions">交易紀錄</NuxtLink></li>
<li><NuxtLink to="/accounts">銀行帳戶</NuxtLink></li>
</ul>
</nav>
</header>
</template>

<script setup>
// 這裡暫時不需要特別的邏輯
</script>

<style scoped>
/* Header 專屬的樣式 */
</style>

2. 更新 layouts/default.vue

將我們的全域元件整合到預設佈局中。

<template>
<div>
<Header />
<main class="container mx-auto py-4">
<NuxtPage />
</main>
<Footer />
</div>
</template>

<script setup>
import Header from '~/components/Header.vue'
import Footer from '~/components/Footer.vue'
</script>

<style scoped>
/* 佈局專屬的樣式 */
</style>

3. 規劃頁面結構

在 pages/ 目錄下,我們可以建立以下頁面:

  • index.vue:首頁,簡單介紹應用程式或展示摘要資訊。
  • transactions.vue:交易紀錄頁面,列出所有交易。
  • accounts.vue:銀行帳戶頁面,管理銀行帳戶資訊。

4. 使用組件與佈局

在各個頁面中,我們可以使用組件來組合內容,確保程式碼的重用性和維護性。

範例:更新 pages/transactions.vue

<template>
<div>
<h2 class="text-2xl font-bold mb-4">交易紀錄</h2>
<TransactionList />
</div>
</template>

<script setup>
import TransactionList from '~/components/TransactionList.vue'
</script>

<style scoped>
/* 頁面專屬的樣式 */
</style>

四、個人建議

  • 善用佈局:利用 layouts 來統一管理頁面的結構,減少重複的程式碼。
  • 拆分組件:將可重用的部分拆分成組件,放在 components/ 目錄下。
  • 清晰的目錄結構:按照 Nuxt 的約定,將檔案放在正確的目錄,讓專案結構清晰明瞭。
  • 全域與局部的區分:將全域性的設定和元件放在 app.vue 或全域的插件中,局部的內容則放在對應的佈局或頁面中。

小結

透過對 app.vue 和 layouts/default.vue 的深入理解,我們可以更有效地規劃 Nuxt 應用的前端結構。這不僅有助於提升開發效率,還能讓程式碼更加易於維護。

記住,良好的結構設計是成功專案的基石。透過合理地利用框架提供的功能,我們可以打造出高品質、可維護的應用程式。

Next

今天,我們深入了解了 Nuxt 的前端結構,並規劃了應用程式的介面。接下來,我們將:

  • 整合後端 API:實現與 Laravel 後端的資料互動,讓應用程式具有實際功能。
  • 處理身份驗證:實作登入、註冊功能,保護使用者資料。
  • 優化使用者介面:使用 Tailwind CSS 進一步美化介面,提升使用者體驗。

讓我們繼續保持熱情,迎接接下來的挑戰吧!相信透過不斷的學習和實踐,我們都能成為更好的開發者。

如果你喜歡這篇文章,歡迎分享給更多人。我們下次見!


這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,這裡有幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
完成後端基本功能並通過驗收後,我們開始使用 Nuxt 架設個人財務管理系統的前端。Nuxt 基於 Vue,學習曲線平緩且配置簡單,適合不同程度的開發者。透過 Docker,我們快速建立了 Nuxt 開發環境,並搭建首頁和交易紀錄頁面,整合 Tailwind CSS 提供美觀的 UI。
我們已完成個人財務管理系統的後端核心功能,並進行了中期驗收,確認API的正確性和需求的達成。通過Postman測試各個API並檢查資料驗證,確保後續的前端整合能順利進行。接下來,將實作身份驗證機制並開始Nuxt.js前端開發,提升系統的整體品質與安全性。
單元測試為重構提供了安全防線,確保程式碼在修改後仍能正常運作。透過撰寫測試,我們能夠提高程式碼品質、預防回歸錯誤,並在重構過程中更具信心。測試的過程不僅幫助找出錯誤,也促使我們深入思考系統設計,從而優化整體架構。
單元測試不僅能發現錯誤,更是提升開發技能的關鍵工具。Laravel 提供強大的測試框架,讓我們可以輕鬆撰寫測試。建立測試資料庫、撰寫測試方法、使用 Factory 生成測試資料,能確保程式碼穩定,並幫助開發者在修改與重構中更有信心。持續撰寫測試能提高程式碼品質,並讓開發過程更有條理與安全感。
本文介紹了如何在 Laravel 中實作控制器,為個人財務管理系統建立完整的 CRUD API。我們實現了資料的建立、查詢、更新和刪除,並使用資料驗證提升應用安全性。未來將進行程式碼重構及 API 測試,持續優化應用程式。
本文介紹 Laravel 中的路由設定,討論手動定義路由、群組、前綴和中介層的使用。透過這些技巧,能夠靈活組織 API 結構,提升可讀性和安全性。此外,還探討子資源路由及命名空間等進階技巧,幫助開發者精細控制路由行為。接下來會探討控制器的實作。
完成後端基本功能並通過驗收後,我們開始使用 Nuxt 架設個人財務管理系統的前端。Nuxt 基於 Vue,學習曲線平緩且配置簡單,適合不同程度的開發者。透過 Docker,我們快速建立了 Nuxt 開發環境,並搭建首頁和交易紀錄頁面,整合 Tailwind CSS 提供美觀的 UI。
我們已完成個人財務管理系統的後端核心功能,並進行了中期驗收,確認API的正確性和需求的達成。通過Postman測試各個API並檢查資料驗證,確保後續的前端整合能順利進行。接下來,將實作身份驗證機制並開始Nuxt.js前端開發,提升系統的整體品質與安全性。
單元測試為重構提供了安全防線,確保程式碼在修改後仍能正常運作。透過撰寫測試,我們能夠提高程式碼品質、預防回歸錯誤,並在重構過程中更具信心。測試的過程不僅幫助找出錯誤,也促使我們深入思考系統設計,從而優化整體架構。
單元測試不僅能發現錯誤,更是提升開發技能的關鍵工具。Laravel 提供強大的測試框架,讓我們可以輕鬆撰寫測試。建立測試資料庫、撰寫測試方法、使用 Factory 生成測試資料,能確保程式碼穩定,並幫助開發者在修改與重構中更有信心。持續撰寫測試能提高程式碼品質,並讓開發過程更有條理與安全感。
本文介紹了如何在 Laravel 中實作控制器,為個人財務管理系統建立完整的 CRUD API。我們實現了資料的建立、查詢、更新和刪除,並使用資料驗證提升應用安全性。未來將進行程式碼重構及 API 測試,持續優化應用程式。
本文介紹 Laravel 中的路由設定,討論手動定義路由、群組、前綴和中介層的使用。透過這些技巧,能夠靈活組織 API 結構,提升可讀性和安全性。此外,還探討子資源路由及命名空間等進階技巧,幫助開發者精細控制路由行為。接下來會探討控制器的實作。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
在過去兩年中,我持續運用 Notion 進行個人管理,個人管理的模板也逐漸定型,藉此分享個人管理模板的使用心得。
Thumbnail
一開始你先把你的專案push上去後,修改vite.config.ts ,要在裡面新增  base: "/Cart/" (/放自己的專案名稱/) build: {outDir: "docs"}, 接下來你要去你的github setting 裡面 -> Page ->選Deploy fro
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
※ 補充說明: ※ npm 常用指令: ◦ npm init–y:快速初始化一個新的 Node.js 並建立一個 package.json 文件的命令。 ◦ npm info 套件名稱 version:快速查詢指定 npm 套件的最新版本號。 ◦ npm install套件名稱:用來安裝
Thumbnail
# 簡介 身為一位專注於 Vue.js 的前端開發者,這是我第一次嘗試構建 Flutter 網頁應用。讓我們開始吧! ## 第一次嘗試 ### 第一步:創建一個 Flutter 應用 首先,通過運行以下命令來創建一個新的 Flutter 項目: ```sh flutter
Thumbnail
本章節將引導你如何建立一個TypeScript開發環境,這包括安裝Node.js、npm和TypeScript,建立一個TypeScript項目,設置編輯器,以及編寫和編譯TypeScript代碼。在完成這些步驟之後,你將能夠編寫、編譯和運行TypeScript代碼。
Thumbnail
平常我們在 html 上常看到的例如 v-for、v-model 等等... 也是VUE已經幫我們定義好的指令,而這次我們可以依這自己的需求來建立。 此功能屬於較進階的功能,因此實戰中會比較少見,市面上還是有不少完善的套件能達到同樣效果,建議可以先往這方面察找
Thumbnail
env 環境變數的設定,通常是為為了 server 而設定的,能快速的切換狀態,但現在的網頁開始,前端的範圍逐漸往後端靠近,所以在設定,也會有 client 的變數會想要在 .env 的情況。此篇就是以 nuxt 為實作,分享此內容 前端架構 最常見的 front 架構,就是把專案 buil
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
這篇文章介紹了網站的整體架構以及開發時所使用的工具和套件,包括 Next.js、Tailwind CSS 和 socket.io 等。文章回顧了程式碼的重構與優化,幫助開發者提高工作效率,適合希望深入瞭解前端開發和網站架構的讀者。
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
在過去兩年中,我持續運用 Notion 進行個人管理,個人管理的模板也逐漸定型,藉此分享個人管理模板的使用心得。
Thumbnail
一開始你先把你的專案push上去後,修改vite.config.ts ,要在裡面新增  base: "/Cart/" (/放自己的專案名稱/) build: {outDir: "docs"}, 接下來你要去你的github setting 裡面 -> Page ->選Deploy fro
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
※ 補充說明: ※ npm 常用指令: ◦ npm init–y:快速初始化一個新的 Node.js 並建立一個 package.json 文件的命令。 ◦ npm info 套件名稱 version:快速查詢指定 npm 套件的最新版本號。 ◦ npm install套件名稱:用來安裝
Thumbnail
# 簡介 身為一位專注於 Vue.js 的前端開發者,這是我第一次嘗試構建 Flutter 網頁應用。讓我們開始吧! ## 第一次嘗試 ### 第一步:創建一個 Flutter 應用 首先,通過運行以下命令來創建一個新的 Flutter 項目: ```sh flutter
Thumbnail
本章節將引導你如何建立一個TypeScript開發環境,這包括安裝Node.js、npm和TypeScript,建立一個TypeScript項目,設置編輯器,以及編寫和編譯TypeScript代碼。在完成這些步驟之後,你將能夠編寫、編譯和運行TypeScript代碼。
Thumbnail
平常我們在 html 上常看到的例如 v-for、v-model 等等... 也是VUE已經幫我們定義好的指令,而這次我們可以依這自己的需求來建立。 此功能屬於較進階的功能,因此實戰中會比較少見,市面上還是有不少完善的套件能達到同樣效果,建議可以先往這方面察找
Thumbnail
env 環境變數的設定,通常是為為了 server 而設定的,能快速的切換狀態,但現在的網頁開始,前端的範圍逐漸往後端靠近,所以在設定,也會有 client 的變數會想要在 .env 的情況。此篇就是以 nuxt 為實作,分享此內容 前端架構 最常見的 front 架構,就是把專案 buil