[ Vue 入門 ] 02 - 從原生 HTML 到 CDN 應用,打造 Vue 動態介面

zxlee-avatar-img
發佈於Vue
更新 發佈閱讀 10 分鐘

初步認識 Vue 之後,接著我們就動手開始寫 Vue 吧。不過在建立專案之前,讓我們先從熟悉的地方,也就是靜態的原生寫法開始。

如果還沒看過介紹 Vue 的文章,可以在這裡移步觀看:我是傳送門
這篇文章的範例與流程主要來自 Scrimba 課程教學,並截取部分 Vue 官方文件說明。

原始 HTML 檔案

假如我們的原始檔案是這樣:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="styles.css" />
<title>Vue.js Basics</title>
</head>
<body>
<header>
<span>🤪</span>
</header>
<main>
<h1>Hello, Vue!</h1>
<p>
I'm about to learn
<a href="https://vuejs.org/" target="_blank"> Vue.js </a>
!
</p>
</main>
<footer>
<p>&copy; 2026</p>
</footer>
</body>
</html>

改寫流程

接著,我們要透過 CDN 的方式來改寫成 Vue。這代表我們會透過 <script> 標籤,引入 Vue 的來源檔案:

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

以下是我們要執行的流程:

  1. 引入 Vue CDN
  2. 把所有內容包在 id 為 app 的容器裡,作為根元件 (root component)
  3. 在另一個 <script> 標籤中,從 Vue 物件中取出 createApp 與 ref 方法
  4. 使用 createApp 建立應用程式實例,並透過 mount 掛載到 #app
  5. 使用 ref 定義動態資料

前四步驟範例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="styles.css" />
<title>Vue.js Basics</title>
</head>
<body>
<!-- 👇 1. 放入 CDN -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

<!-- 👇 2. 把所有內容放入 app 容器 -->
<div id="app">
<header>
<span>🤪</span>
</header>
<main>
<h1>Hello, Vue!</h1>
<p>
I'm about to learn
<a href="https://vuejs.org/" target="_blank"> Vue.js </a>
!
</p>
</main>
<footer>
<p>&copy; 2026</p>
</footer>
</div>

<!-- 撰寫 Vue 程式 -->
<script>
// 👇 3. 從 Vue 取出需要的函式
const { createApp, ref } = Vue

// 👇 4. 創建並掛載應用程式實例
createApp({
// 根元件設置
}).mount("#app")
</script>
</body>
</html>

💡 補充:關於 createApp

  • Vue 建立應用程式的方法,會回傳應用程式實例。
  • 所傳入的物件事實上是一個元件,通常是應用程式的根元件。
  • 如果是透過 npm 建立專案,預設會在 App.vue 匯集應用程式的元件,然後在 main.js 匯入。
// main.js
import { createApp } from "vue"
import App from "./App.vue"

createApp(App).mount("#app")

💡 補充:關於 mount

  • 應用程式實例需要經過掛載,才會渲染出來。
  • 傳入的是作為根元件的容器,可以是選擇器字串或是 DOM 元素。
  • 這個方法應該在所有配置設置好、資源註冊完成後呼叫。
  • 不像其他資源註冊方法,mount 回傳的是根元件實例,不是應用程式實例。
import { createApp } from "vue"
import App from "./App.vue"

const app = createApp(App)

// 資源註冊方法
app.use(...)
app.component(...)
app.provide(...)

app.mount("#app")

透過 ref 定義動態資料

要定義動態資料,首先需要在 #app 容器內的模板中,找到要改寫的地方,並使用 {{ }} 插值語法標記變數名稱。

假設我們想把 header 裡原本寫死的 🤪 改成可以動態變化的 emoji,可以執行以下步驟:

一、修改模板

先將模板的 🤪 改用 {{ emoji }} 取代,即:

<header>
<span>{{ emoji }}</span>
</header>

二、在根元件定義

createApp({
setup() {
const emoji = ref("🥹") // 定義

return { emoji } // 回傳
}
}).mount("#app")

當 setup 回傳 emoji 之後,模板中就可以使用它。畫面上原本的 🤪 就會變成 🥹 了。

完成版範例我寫在 CodePen 上:

💡 補充:關於 setup

由於這裡是採用 Composition API 寫法,所以會在 setup 使用從 Vue 物件取得的 ref 方法定義資料。

你可能會在其他地方看到 Options API 的寫法,這樣便可以不需要引用方法,直接在 data 定義:

createApp({
data() {
return { emoji: "🥹" }
}
}).mount("#app")

💡 補充:什麼是 In-DOM 根元件模板?

掛載目標 #app 容器內的 DOM,稱為「In-DOM 根元件模板」。以本文範例來說,就是原本在 body 裡的 header、main 及 footer。

當我們呼叫 mount("#app") 時,Vue 會把 #app 內的 HTML 當作 template 進行編譯,效果就和專案模式中寫在 App.vue裡的 <template> 相同。

這種寫法多見於 CDN 的使用方式,不需要建置工具即可運作。不過在實務專案中,通常會搭配建置工具(如 Vite)並使用 .vue 單檔元件來開發。

小結

這篇文章來自於 Scrimba 教學影片內容,主要快速走過如何透過 CDN 撰寫 Vue 程式碼,其中包括:

  • createApp 建立應用程式實例
  • mount 將應用程式掛載到根元件上
  • ref 定義動態資料

相信對開專案後,能夠在理解 Vue 專案的運作上有所幫助。

參考資料

  1. Scrimba 教學影片
  2. Vue 官方文件

Vue 入門系列文章

  1. [ Vue 入門 ] 01:宣告式渲染、響應式系統與 SFC
  2. [ Vue 入門 ] 02 - 從原生 HTML 到 CDN 應用,打造 Vue 動態介面
留言
avatar-img
肝 code 人生
1會員
9內容數
2024 年 7 月開始的「肝 code 人生」,2025 年 1 月撰寫第一篇程式筆記
你可能也想看
Thumbnail
這篇文章分享了申請 AppWorks School 轉職培訓的過程,包括背景及源起、報名前準備、報名及面談、總結等內容,並提供了未來申請者的建議。如果你正在尋求轉職機會,這篇文章可能對你有所幫助。
Thumbnail
這篇文章分享了申請 AppWorks School 轉職培訓的過程,包括背景及源起、報名前準備、報名及面談、總結等內容,並提供了未來申請者的建議。如果你正在尋求轉職機會,這篇文章可能對你有所幫助。
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
作為一個非常不專業的前端初學者,有陣子常常卡在公司官網,要插入 Youtube 影片無法RWD(響應式)的問題。 跟不熟悉 網頁技術的朋友們介紹,RWD 就是指網頁的排版能跟著螢幕的大小縮放、變化編排,在這個人手一機的時代,特別重要。
Thumbnail
作為一個非常不專業的前端初學者,有陣子常常卡在公司官網,要插入 Youtube 影片無法RWD(響應式)的問題。 跟不熟悉 網頁技術的朋友們介紹,RWD 就是指網頁的排版能跟著螢幕的大小縮放、變化編排,在這個人手一機的時代,特別重要。
Thumbnail
Create project 裝好 vue CLI 之後,只要在終端輸入 vue create 想取的專案名稱 就可以開始創建 vue 專案囉 1. Pick a preset 2. Select the features 3. Choose the version of vue 選擇 vue3
Thumbnail
Create project 裝好 vue CLI 之後,只要在終端輸入 vue create 想取的專案名稱 就可以開始創建 vue 專案囉 1. Pick a preset 2. Select the features 3. Choose the version of vue 選擇 vue3
Thumbnail
在剛開始寫 JavaScript 可能大多數的人不會特別意識到 JavaScript 的型別系統有什麼特別之處,我是在看完 Youtube 上 CS50 的課程,才理解到在不同的程式語言中,會因為語言的特性而有不同的系統,JavaScript 就是偏向比較特別的那一種。
Thumbnail
在剛開始寫 JavaScript 可能大多數的人不會特別意識到 JavaScript 的型別系統有什麼特別之處,我是在看完 Youtube 上 CS50 的課程,才理解到在不同的程式語言中,會因為語言的特性而有不同的系統,JavaScript 就是偏向比較特別的那一種。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
data-* attributes 是 HTML 內建的屬性,可將網頁的狀態與元素進行綁定。而Tailwind CSS 在 3.2 版更新中推出使用 data-* attributes 自訂樣式的功能,讓樣式設定可以更動態多變。
Thumbnail
data-* attributes 是 HTML 內建的屬性,可將網頁的狀態與元素進行綁定。而Tailwind CSS 在 3.2 版更新中推出使用 data-* attributes 自訂樣式的功能,讓樣式設定可以更動態多變。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
為什麼 JavaScript 中的字串無法修改?為什麼複製變數後,改變其中一個會影響另一個?本文將深入解析 JavaScript 的原生值 (primitive values) 與物件 (objects) 的運作機制,說明傳值與傳參考的差異,避免非預期的程式行為,提升開發效率!!
Thumbnail
為什麼 JavaScript 中的字串無法修改?為什麼複製變數後,改變其中一個會影響另一個?本文將深入解析 JavaScript 的原生值 (primitive values) 與物件 (objects) 的運作機制,說明傳值與傳參考的差異,避免非預期的程式行為,提升開發效率!!
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News