[ 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
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
為什麼 JavaScript 中的字串無法修改?為什麼複製變數後,改變其中一個會影響另一個?本文將深入解析 JavaScript 的原生值 (primitive values) 與物件 (objects) 的運作機制,說明傳值與傳參考的差異,避免非預期的程式行為,提升開發效率!!
Thumbnail
為什麼 JavaScript 中的字串無法修改?為什麼複製變數後,改變其中一個會影響另一個?本文將深入解析 JavaScript 的原生值 (primitive values) 與物件 (objects) 的運作機制,說明傳值與傳參考的差異,避免非預期的程式行為,提升開發效率!!
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
作為一個非常不專業的前端初學者,有陣子常常卡在公司官網,要插入 Youtube 影片無法RWD(響應式)的問題。 跟不熟悉 網頁技術的朋友們介紹,RWD 就是指網頁的排版能跟著螢幕的大小縮放、變化編排,在這個人手一機的時代,特別重要。
Thumbnail
作為一個非常不專業的前端初學者,有陣子常常卡在公司官網,要插入 Youtube 影片無法RWD(響應式)的問題。 跟不熟悉 網頁技術的朋友們介紹,RWD 就是指網頁的排版能跟著螢幕的大小縮放、變化編排,在這個人手一機的時代,特別重要。
Thumbnail
這篇文章分享了申請 AppWorks School 轉職培訓的過程,包括背景及源起、報名前準備、報名及面談、總結等內容,並提供了未來申請者的建議。如果你正在尋求轉職機會,這篇文章可能對你有所幫助。
Thumbnail
這篇文章分享了申請 AppWorks School 轉職培訓的過程,包括背景及源起、報名前準備、報名及面談、總結等內容,並提供了未來申請者的建議。如果你正在尋求轉職機會,這篇文章可能對你有所幫助。
Thumbnail
data-* attributes 是 HTML 內建的屬性,可將網頁的狀態與元素進行綁定。而Tailwind CSS 在 3.2 版更新中推出使用 data-* attributes 自訂樣式的功能,讓樣式設定可以更動態多變。
Thumbnail
data-* attributes 是 HTML 內建的屬性,可將網頁的狀態與元素進行綁定。而Tailwind CSS 在 3.2 版更新中推出使用 data-* attributes 自訂樣式的功能,讓樣式設定可以更動態多變。
Thumbnail
在剛開始寫 JavaScript 可能大多數的人不會特別意識到 JavaScript 的型別系統有什麼特別之處,我是在看完 Youtube 上 CS50 的課程,才理解到在不同的程式語言中,會因為語言的特性而有不同的系統,JavaScript 就是偏向比較特別的那一種。
Thumbnail
在剛開始寫 JavaScript 可能大多數的人不會特別意識到 JavaScript 的型別系統有什麼特別之處,我是在看完 Youtube 上 CS50 的課程,才理解到在不同的程式語言中,會因為語言的特性而有不同的系統,JavaScript 就是偏向比較特別的那一種。
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
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News