Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

深入理解 Alpine.js 中的 template 標籤使用指南

最後更新:2025年1月7日JavaScript

本文為 留言評分功能 系列教學,第 6 篇:

  1. 使用 Django + Tailwind + Alpine.js 實作「五顆星評分」功能教學
  2. Django validators 驗證器完整教學
  3. Django PositiveSmallIntegerField 新手指南
  4. 在 esbuild 專案中整合 Alpine.js 的完整指南
  5. 使用 Alpine.js 建立星星評分表單 — 新手指南
  6. 深入理解 Alpine.js 中的 template 標籤使用指南 👈 所在位置
  7. Django 網站如何新增「星星評分」功能 — 後端接收邏輯
  8. Django 表單:如何讓使用者選擇性提交星星評分與留言
  9. Django 如何限制同一使用者只能對同一服務留言一次?
  10. Django 留言軟刪除邏輯|程式碼解析
  11. Django 計算評分摘要教學 — 使用 ORM 進行星等統計
  12. Python Django 使用 annotate、aggregate 統計教學
  13. 使用 Alpine.js 實作星級評分分佈 – 詳細教學
  14. Alpine.js 與 Tailwind CSS 動態樣式解析:為什麼有些樣式無法生效?
  15. Django 中使用 annotate() 與 Avg() 進行平均評分計算

在使用 Alpine.js 開發前端應用時,經常會遇到需要根據資料動態渲染內容的情況,例如:條件渲染、重複渲染等。

為了達到這個目的,Alpine.js 提供了一個特殊的 HTML 元素——<template> 標籤。

<template> 標籤是一種「隱藏的 HTML 容器」,不會直接渲染到 DOM 上,但可用於動態內容控制,尤其適用於 x-for 和 x-if 這類指令。

本文將詳細介紹 <template> 的用途、範例以及最佳實踐,幫助新手理解其運作方式。


<template> 標籤的特性與作用

主要功能

  1. 不會渲染到 DOM 中
    • <template> 本身不會出現在網頁中,但其內部的子元素會根據條件或數據動態渲染。
  2. 用於重複與條件渲染
    • 常與 x-for(重複渲染)和 x-if(條件渲染)一起使用。
  3. 避免多餘的 DOM 元素
    • 在多層渲染時,防止生成額外的包裹元素,保持 DOM 結構簡潔。

使用範例

使用 x-for 進行重複渲染

x-for 用於遍歷陣列並為每個元素渲染一個 DOM 節點。

<div x-data="{ items: ['蘋果', '香蕉', '葡萄'] }">
    <template x-for="item in items">
        <p x-text="item"></p>
    </template>
</div>

說明:

  • x-data="{ items: ['蘋果', '香蕉', '葡萄'] }":初始化一個包含 items 陣列的元件。
  • <template> 本身不會顯示在 DOM 中,但其內部的 <p> 元素會根據 items 陣列自動渲染三次。

渲染結果:

<p>蘋果</p>
<p>香蕉</p>
<p>葡萄</p>

使用 x-if 進行條件渲染

x-if 用於根據條件判斷是否渲染 DOM 元素。

<div x-data="{ show: true }">
    <template x-if="show">
        <p>這是條件渲染的文字。</p>
    </template>
    <button @click="show = !show">切換顯示</button>
</div>

說明:

  • x-if="show":只有當 show 為 true 時,才會渲染 <p> 元素。
  • 當按下按鈕時,show 變數的狀態切換,從而控制 <p> 元素是否可見。

互動效果:

  1. 頁面載入時顯示文字「這是條件渲染的文字」。
  2. 按下按鈕後,文字消失。
  3. 再次點擊按鈕,文字重新出現。

為什麼需要 <template>?

沒有使用 <template> 的問題

在不使用 <template> 時,可能會生成多餘的 DOM 元素。

<div x-data="{ items: ['蘋果', '香蕉', '葡萄'] }">
    <div x-for="item in items">
        <p x-text="item"></p>
    </div>
</div>

渲染結果(多出不必要的 <div> 元素):

<div>
    <div><p>蘋果</p></div>
    <div><p>香蕉</p></div>
    <div><p>葡萄</p></div>
</div>

使用 <template> 後的最佳實踐

<div x-data="{ items: ['蘋果', '香蕉', '葡萄'] }">
    <template x-for="item in items">
        <p x-text="item"></p>
    </template>
</div>

渲染結果(乾淨且無多餘的元素):

<p>蘋果</p>
<p>香蕉</p>
<p>葡萄</p>

<template> 與 x-for、x-if 的比較

功能<template> + x-for<template> + x-if
用途用於陣列的重複渲染用於條件渲染
渲染方式依據陣列長度動態渲染多次依據條件決定是否渲染一次
避免多餘 DOM✅ 是✅ 是
是否綁定數據✅ 綁定迭代的每個項目✅ 綁定條件狀態
適用場景列表、選單、多筆資料呈現顯示/隱藏特定內容(如彈窗)
<template> + x-for用於陣列的重複渲染
<template> + x-if用於條件渲染
<template> + x-for依據陣列長度動態渲染多次
<template> + x-if依據條件決定是否渲染一次
<template> + x-for✅ 是
<template> + x-if✅ 是
<template> + x-for✅ 綁定迭代的每個項目
<template> + x-if✅ 綁定條件狀態
<template> + x-for列表、選單、多筆資料呈現
<template> + x-if顯示/隱藏特定內容(如彈窗)

總結

  • <template> 是 Alpine.js 中專門用於條件渲染 (x-if) 與重複渲染 (x-for) 的特殊容器。
  • 優勢:
    • 不會直接渲染到 DOM 中,僅渲染其內部內容。
    • 減少多餘的 DOM 元素,保持程式碼整潔。
    • 提升可維護性,適合搭配 Alpine.js 的響應式功能使用。
  • 適用場景:
    • 動態生成清單
    • 條件顯示內容(如通知訊息、彈窗)
    • 減少不必要的包裹元素

透過本文的範例與解釋,希望你能對 Alpine.js 中的 <template> 標籤有更清晰的理解與實作能力!

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

JavaScript

目錄

  • <template> 標籤的特性與作用
  • 主要功能
  • 使用範例
  • 使用 x-for 進行重複渲染
  • 使用 x-if 進行條件渲染
  • 為什麼需要 <template>?
  • 沒有使用 <template> 的問題
  • 使用 <template> 後的最佳實踐
  • <template> 與 x-for、x-if 的比較
  • 總結