Event Handling — Vue

v-on (@) const count = ref(0) const increment = () => count.value++ ---template--- Klik: {{ count }} Event Modifiers ---template--- ... Klik Inline Handler…

Event handling artinya memberi tahu Vue apa yang harus dijalankan saat pengguna melakukan sesuatu: mengklik, mengetik, menekan tombol keyboard, atau mengirim form. Bayangin bel di meja Warung Bu Sri. Belnya sendiri gak melakukan apa-apa. Bu Sri yang punya aturan: "kalau bel bunyi, aku datang ke kasir". Di Vue, aturan itu ditulis @click="tambah": kalau ada klik, jalankan tambah.

🧪 Tebakan cepat: Script berisi function tambah(nama) { pesanan.value.push(nama) }, dan tombolnya ditulis <button @click="tambah">Tambah</button>, tanpa kurung. Sesudah satu klik, apa yang tampil di "Pesanan:"? Tebak dulu, jawabannya ada di bagian "Dengan atau tanpa kurung".

@click: jalankan kode saat diklik

const jumlah = ref(0)

function tambah() {
  jumlah.value++
}

---template---
<p>Es Teh × {{ jumlah }}</p>
<button @click="tambah">Tambah</button>
<button @click="jumlah = 0">Batal</button>
Kejadian jumlah Layar
Halaman tampil 0 Es Teh × 0
Klik Tambah 1 Es Teh × 1
Klik Tambah 2 Es Teh × 2
Klik Batal 0 Es Teh × 0

Dengan atau tanpa kurung

const pesanan = ref([])

function tambah(nama) {
  pesanan.value.push(nama)
}

---template---
<button @click="tambah('Es Teh')">Tambah Es Teh</button>
<button @click="tambah">Tanpa kurung</button>
<p>Pesanan: {{ pesanan.join(", ") }}</p>
Ditulis nama yang diterima tambah "Pesanan:" sesudah 1 klik
@click="tambah('Es Teh')" "Es Teh" Es Teh
@click="tambah" objek event klik [object PointerEvent] di Chrome
@click="tambah()" undefined kosong

Tanpa kurung, yang tampil [object PointerEvent], bukan nama menu. Itu jawaban tebakannya.

Modifier: .prevent, .stop, .once, dan tombol keyboard

const log = ref([])

---template---
<div @click="log.push('kartu Es Teh dibuka')">
  Es Teh
  <button @click.stop="log.push('tambah Es Teh')">Tambah</button>
</div>
<input @keyup.enter="log.push('cari menu')" placeholder="Cari menu" />
<form @submit.prevent="log.push('pesanan dikirim')">
  <button>Kirim pesanan</button>
</form>
<p>{{ log.join(" | ") }}</p>

Modifier ditulis dengan titik sesudah nama event, dan menggantikan satu baris kode yang biasa kamu tulis sendiri:

Modifier Sama dengan Contoh
.prevent event.preventDefault() @submit.prevent: kirim form tanpa memuat ulang halaman
.stop event.stopPropagation() @click.stop: klik tombol gak ikut sampai ke kartu di luarnya
.once handler cuma jalan sekali @click.once: diklik tiga kali, tetap jalan sekali
.enter, .esc cuma saat tombol itu ditekan @keyup.enter="cari"

⚠️ Jebakan yang sering ketemu

TL;DR: @click="tambah" (singkatan v-on:click) menjalankan tambah saat elemen diklik; isinya boleh nama fungsi atau perintah pendek seperti count++. Tanpa kurung, Vue memberi fungsinya objek event; dengan kurung, kamu yang menentukan argumennya, dan $event memberi objek event di template. Modifier menggantikan kode kecil: .prevent memanggil preventDefault() dan mencegah aksi bawaan seperti form memuat ulang halaman, .stop menghentikan event merambat ke induknya, .once cuma jalan sekali, .enter cuma saat Enter. Jangan pakai onclick HTML biasa, dan di script ubah ref lewat .value.

Yang akan kamu pelajari