Vue

Vue 이벤트 핸들링 완전 정리

Vue v-on(@) 이벤트 바인딩부터 .stop, .prevent, .once, .self, .capture 수정자까지. Vue 이벤트 핸들링과 수정자를 표와 실전 예제로 완전 정리합니다.

Vue 이벤트 핸들링 완전 정리

Vue에서는 템플릿에서 다양한 이벤트를 사용하여 사용자와의 상호작용을 처리할 수 있으며,
이벤트 수정자를 통해 이벤트 동작을 세밀하게 제어할 수 있습니다.
이 문서에서는 Vue에서 자주 사용하는 이벤트와 이벤트 수정자의 종류와 사용 방법에 대해 정리합니다.

1. Vue 이벤트 종류

Vue 템플릿에서는 @ 접두사를 사용하여 클릭, 입력, 포커스 등
다양한 이벤트를 요소에 직접 바인딩할 수 있습니다.

주요 이벤트 목록

이벤트 설명 발생 시기 사용 예시
@click 클릭 이벤트 사용자가 요소를 클릭할 때 <button @click="handleClick">Click</button>
@dblclick 더블 클릭 이벤트 사용자가 요소를 두 번 클릭할 때 <button @dblclick="handleDoubleClick">Double Click</button>
@focus 포커스 이벤트 입력 필드가 포커스를 얻을 때 <input @focus="handleFocus" />
@blur 포커스 해제 이벤트 입력 필드에서 포커스가 해제될 때 <input @blur="handleBlur" />
@input 입력 이벤트 사용자가 입력 필드에 값을 입력할 때 <input @input="handleInput" />
@change 값 변경 완료 이벤트 사용자가 입력 필드에서 값 입력 후 포커스를 바꿀 때 <input @change="handleChange" />
@submit 폼 제출 이벤트 폼이 제출될 때 <form @submit.prevent="handleSubmit">
@keydown 키 누름 이벤트 사용자가 키보드를 누를 때 <input @keydown="handleKeydown" />
@keyup 키 해제 이벤트 사용자가 키보드를 누르다 떼었을 때 <input @keyup="handleKeyup" />
@keypress 키 누름 이벤트 (키가 입력될 때 발생) 사용자가 키보드를 눌렀을 때 (텍스트 입력 시) <input @keypress="handleKeypress" />
@mouseenter 마우스 오버 이벤트 마우스가 요소 위로 올라갈 때 <div @mouseenter="handleMouseEnter">
@mouseleave 마우스 오버 해제 이벤트 마우스가 요소에서 벗어날 때 <div @mouseleave="handleMouseLeave">
@mousemove 마우스 이동 이벤트 마우스가 요소 위에서 이동할 때 <div @mousemove="handleMouseMove">
@mouseover 마우스 오버 이벤트 마우스가 요소 위로 올라갔을 때 <div @mouseover="handleMouseOver">
@mouseout 마우스 오버 해제 이벤트 마우스가 요소 밖으로 벗어날 때 <div @mouseout="handleMouseOut">
@contextmenu 컨텍스트 메뉴 (오른쪽 클릭) 이벤트 사용자가 요소를 오른쪽 클릭할 때 <div @contextmenu="handleContextMenu">
@wheel 마우스 휠 이벤트 사용자가 마우스 휠을 움직일 때 <div @wheel="handleWheel">

2. Vue 이벤트 수정자

이벤트 수정자는 이벤트의 기본 동작과 전파 방식을 제어하는 데 사용됩니다.

이벤트 수정자 설명 사용 예시
.stop 이벤트 전파를 중단합니다. 부모 요소로의 이벤트 전파가 차단됩니다. @click.stop="handleClick"
.prevent 기본 이벤트 동작을 방지합니다. 주로 폼 제출 등의 기본 동작을 방지할 때 사용합니다. @submit.prevent="handleSubmit"
.capture 캡처링 단계에서 이벤트를 처리합니다. 이벤트가 자식에서 부모로 전달되기 전에 발생합니다. @click.capture="handleClick"
.self 이벤트가 특정 요소에서만 발생하도록 제한합니다. 중첩된 요소의 이벤트 처리를 할 때 유용합니다. @click.self="handleClick"
.once 이벤트가 처음 발생할 때 한 번만 처리되도록 합니다. @click.once="handleClick"
.passive 스크롤 성능을 향상시키기 위해 기본 동작을 비동기적으로 처리합니다. @scroll.passive="handleScroll"

수정자 사용 예시

<!-- 기본 동작 방지 (폼 제출) -->
<form @submit.prevent="handleSubmit">...</form>

<!-- 이벤트 전파 차단 -->
<div @click.stop="handleClick">...</div>

<!-- 캡처링 단계에서 이벤트 처리 -->
<div @click.capture="handleClick">...</div>

<!-- 요소 자체에서만 이벤트 트리거 -->
<div @click.self="handleClick">여기를 클릭해 보세요.</div>

<!-- 한 번만 이벤트 처리 -->
<button @click.once="handleClick">한 번만 클릭 됩니다.</button>
댓글