iT邦幫忙

2025 iThome 鐵人賽

DAY 5
1
Vue.js

邊學邊做:Vue.js 實戰養成計畫系列 第 5

Day 5:雙向通信的引力 — v-model 與資料綁定

  • 分享至 

  • xImage
  •  

昨天我們在組件星雲中學會了「單向通信」:
props:父傳子資料
emit:子傳父事件

但是,如果父元件和子元件能自然地「保持同步」,就像兩顆被引力牽引的雙星,那不是更方便嗎?
今天,我們要認識 Vue 的三個核心指令:v-bindv-onv-model,以及v-bindv-onpropsemit差別,最後如何用 v-model 實現資料與畫面的雙向綁定。


v-bindv-onv-model 的關係

1)v-bind — 單向通信(資料 ➡ 畫面)
解釋:v-bind把 JavaScript 的資料綁定到 HTML 元素或元件屬性上。

<p v-bind:title="message">滑鼠移過來看看提示</p>
<!-- 簡寫 -->
<p :title="message">滑鼠移過來看看提示</p>
message = "Hello Vue"title 屬性會自動顯示 Hello Vue

2)v-on — 事件監聽(畫面 ➡ 程式)
解釋:監聽 DOM 事件,把使用者的操作傳回 JavaScript 方法。

<button v-on:click="sayHi">點我</button>
<!-- 簡寫 -->
<button @click="sayHi">點我</button>
當使用者按下按鈕,會觸發 sayHi() 方法。

3)v-model — 雙向通信(資料 ⭤ 畫面)
解釋:v-modelv-bind + v-on 的語法糖,讓資料和畫面之間形成「雙向綁定」。

<input v-model="message" />

等於

<input :value="message" @input="event => message = event.target.value" />
message 改變時,輸入框會跟著更新;反過來輸入框有變動,message 也會更新。

v-bindv-onpropsemit差別

v-bindv-on → 模板語法(在模板裡用的指令,像工具)
propsemit → 元件機制(Vue 提供的 API,用來讓元件之間交換資料與事件)


v-model實作範例:宇宙登記表

修改src/App.vue程式碼:

<template>
  <main>
    <h1>🌠 宇宙通訊中心</h1>

    <label>
      星球名稱:
      <input v-model="planet" placeholder="請輸入星球名稱" />
    </label>

    <label>
      是否可居住:
      <input type="checkbox" v-model="habitable" />
    </label>

    <label>
      星球類型:
      <select v-model="planetType">
        <option>岩石行星</option>
        <option>氣態巨星</option>
        <option>冰原行星</option>
      </select>
    </label>

    <hr />

    <h2>🛰️ 即時回報</h2>
    <p>星球名稱:{{ planet }}</p>
    <p>是否可居住:{{ habitable ? "✅ 是" : "❌ 否" }}</p>
    <p>星球類型:{{ planetType }}</p>
  </main>
</template>

<script>
export default {
  name: "App",
  data() {
    return {
      planet: "",
      habitable: false,
      planetType: "岩石行星"
    }
  }
}
</script>

<style scoped>
main { max-width: 600px; margin: 40px auto; line-height: 1.8; }
label { display: block; margin-bottom: 16px; }
input, select { margin-left: 8px; padding: 4px 8px; }
</style>

執行結果
當你在輸入框輸入「火星」→ 畫面立即顯示「星球名稱:火星」。
勾選「是否可居住」→ 畫面會即時顯示 ✅ 或 ❌。
切換星球類型下拉選單 → 畫面同步更新。
https://ithelp.ithome.com.tw/upload/images/20250916/20178644FAkPvJHG2G.png

今天的 v-model 是不是超方便?資料改 → 畫面就會跟著變。
不過,有時候我們還要「決定要不要出現這個東西」。
明天我們就來看 v-if / v-show,教你怎麼控制畫面要顯示還是隱藏。

參考資源
https://vuejs.org/guide
https://www.runoob.com/vue3


上一篇
Day 4:探索組件星雲 — 元件基礎(建立/引入元件、props、emit)
下一篇
Day 6:條件星門 — v-if / v-show
系列文
邊學邊做:Vue.js 實戰養成計畫7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言