vocus logo

方格子 vocus

[ 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
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
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
為什麼 JavaScript 中的字串無法修改?為什麼複製變數後,改變其中一個會影響另一個?本文將深入解析 JavaScript 的原生值 (primitive values) 與物件 (objects) 的運作機制,說明傳值與傳參考的差異,避免非預期的程式行為,提升開發效率!!
Thumbnail
為什麼 JavaScript 中的字串無法修改?為什麼複製變數後,改變其中一個會影響另一個?本文將深入解析 JavaScript 的原生值 (primitive values) 與物件 (objects) 的運作機制,說明傳值與傳參考的差異,避免非預期的程式行為,提升開發效率!!
Thumbnail
在剛開始寫 JavaScript 可能大多數的人不會特別意識到 JavaScript 的型別系統有什麼特別之處,我是在看完 Youtube 上 CS50 的課程,才理解到在不同的程式語言中,會因為語言的特性而有不同的系統,JavaScript 就是偏向比較特別的那一種。
Thumbnail
在剛開始寫 JavaScript 可能大多數的人不會特別意識到 JavaScript 的型別系統有什麼特別之處,我是在看完 Youtube 上 CS50 的課程,才理解到在不同的程式語言中,會因為語言的特性而有不同的系統,JavaScript 就是偏向比較特別的那一種。
Thumbnail
data-* attributes 是 HTML 內建的屬性,可將網頁的狀態與元素進行綁定。而Tailwind CSS 在 3.2 版更新中推出使用 data-* attributes 自訂樣式的功能,讓樣式設定可以更動態多變。
Thumbnail
data-* attributes 是 HTML 內建的屬性,可將網頁的狀態與元素進行綁定。而Tailwind CSS 在 3.2 版更新中推出使用 data-* attributes 自訂樣式的功能,讓樣式設定可以更動態多變。
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
作為一個非常不專業的前端初學者,有陣子常常卡在公司官網,要插入 Youtube 影片無法RWD(響應式)的問題。 跟不熟悉 網頁技術的朋友們介紹,RWD 就是指網頁的排版能跟著螢幕的大小縮放、變化編排,在這個人手一機的時代,特別重要。
Thumbnail
作為一個非常不專業的前端初學者,有陣子常常卡在公司官網,要插入 Youtube 影片無法RWD(響應式)的問題。 跟不熟悉 網頁技術的朋友們介紹,RWD 就是指網頁的排版能跟著螢幕的大小縮放、變化編排,在這個人手一機的時代,特別重要。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News