iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
Vue.js

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

Day 8:事件流星雨 — v-on 與事件處理

  • 分享至 

  • xImage
  •  

昨天我們用 v-for 排列出一整片星球,但這些星球還是靜靜地掛在銀河裡。
如果想讓它們「動起來」,像是點擊後發光,那我們需要一個能處理互動的工具:v-on

1)什麼是 v-on

  • v-on 是 Vue 用來監聽 事件 的指令。
  • 當使用者觸發某個動作(例如點擊、輸入、滑鼠移動),v-on 就能呼叫我們事先定義好的方法,讓程式「做出回應」。

你可以把 v-on 想像成 宇宙飛船的控制台:

  • 按下某個按鈕(事件),就會啟動對應的功能(方法)。
  • 比如「點擊星球 → 彈出訊息」、「滑鼠移過星星 → 星星變亮」。

2)常見的 v-on 指令縮寫

指令 用途
@click 點擊事件(最常用)
@dblclick 雙擊
@mouseover 滑鼠移入
@mouseout 滑鼠移出
@keyup 鍵盤放開
@input 表單輸入

其實 v-on 就是「事件綁定」,而 @ 是它的縮寫,所以 v-on:click = @click

3)常見的 v-on 指令縮寫

v-on 的修飾子 功能 / 特點
.prevent 防止預設事件,例如 submit 表單預設會刷新頁面。@submit.prevent="..."
.stop 停止事件冒泡。@click.stop="..." 有多個父元素也有 click 事件時用
.once 事件只觸發一次,之後自動移除監聽
.capture 會先觸發外層,再觸發內層
.passive 鍵告訴瀏覽器這個事件處理器不會呼叫 preventDefault, .passive 與 .prevent 兩者不應混用

.once範例:

<button @click.once="sayHi">click me</button>

4)v-on 範例:點擊星球觸發流星雨

<template>
  <div>
    <h2>🌌 銀河互動實驗</h2>
    <ul>
      <!-- 點擊某個星球時,呼叫 showMessage -->
      <li 
        v-for="planet in planets" 
        :key="planet"
        @click="showMessage(planet)"
      >
        🪐 {{ planet }}
      </li>
    </ul>

    <p v-if="message">{{ message }}</p>
  </div>
</template>

<script setup>
import { ref } from 'vue'

// 星球清單
const planets = ref(['水星', '金星', '地球', '火星', '木星'])

// 訊息
const message = ref('')

// 當點擊星球時觸發
function showMessage(planet) {
  message.value = `✨ 你剛剛點擊了 ${planet},流星雨劃過銀河!`
}
</script>

https://ithelp.ithome.com.tw/upload/images/20250917/20178644FmiPNNcM2R.png
結果:
點擊「水星」會顯示:☄️ 你剛剛點擊了 水星,流星雨劃過銀河!
點擊「地球」會顯示:🌍 你剛剛點擊了 地球,流星雨劃過銀河!

5)總結

v-on 是 Vue 處理事件的核心指令,讓畫面和使用者的動作串起來。
明天我們要來試試「如果點擊次數超過 3 次,要不要顯示一個特別訊息?」、「如果地球數據改變,能不能馬上計算出新的結果?」這些需求,靠 v-on 太麻煩了。這時需要 computedwatch,讓 Vue 自己幫我們算、幫我們盯資料~

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


上一篇
Day 7:星際迴圈 — v-for 的應用
下一篇
Day 9:計算的軌道 — computed 與 watch
系列文
邊學邊做:Vue.js 實戰養成計畫10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言