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

閱讀時間約 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
查看全部
發表第一個留言支持創作者!
完成後端基本功能並通過驗收後,我們開始使用 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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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