v-on
디렉티브를 사용하여 이벤트 리스닝
v-on:[이벤트 이름]="표현식" @[이벤트이름]="표현식" // 단축 표현
핸들러 값은 다음 중 하나
- 인라인 핸들러 : 이벤트가 트리거될 때 실행되는 인라인 JavaScript
- 메서드 핸들러 : 컴포넌트에 정의된 메서드 이름 또는 메서드를 가리키는 경로
인라인 핸들러
- 간단한 경우 사용
<div id="app"> <!-- 인라인의 this도 Vue의 인스턴스 --> <input type="text" :value="name" **@input="(e)=>this.name=e.target.value"** /> <br /> 이름: <span>{{name}}</span> </div> <script src="https://unpkg.com/vue"></script> <script> let vm = Vue.createApp({ name: "App", data() { return { name: "", }; }, }).mount("#app"); </script>
인라인 핸들러에서 메서드 호출
- 네이티브 이벤트 객체 대신 사용자 지정 인자를 메서드에 전달할 때 사용
methods: { say(message) { alert(message) } }
<button @click="say('안녕')">안녕이라고 말하기</button> <button @click="say('잘가')">잘가라고 말하기</button>
인라인 핸들러에서 이벤트 객체 접근
$event
특수 키워드 사용 or 인라인 화살표 함수 사용
methods: { warn(message, event) { // 네이티브 이벤트 객체에 접근 가능 if (event) { event.preventDefault() } alert(message) } }
<!-- 특수한 키워드인 $event 사용 --> <button @click="warn('아직 양식을 제출할 수 없습니다.', $event)"> 제출하기 </button> <!-- 인라인 화살표 함수 사용 --> <button @click="(event) => warn('아직 양식을 제출할 수 없습니다.', event)"> 제출하기 </button>
메서드 핸들러
- 복잡한 경우
- 메서드 핸들러는 이를 트리거하는 네이티브 DOM 이벤트 객체를 자동으로 수신
메서드 vs 인라인
foo
,foo.bar
,foo[’bar’]
→ 메서드 핸들러 처리foo()
,count++
→ 인라인 핸들러 처리
- 이벤트 객체만 넘길 때
@click="함수명"
- 이벤트 객체가 아닌 자신의 데이터를 넘기고자 할 때
@click=”함수명(인자)”
- 이벤트 객체와 자신의 데이터를 넘기고자 할 때
@click="함수명($event, 인자)"
이벤트 수식어
- 이벤트 핸들러 내에서
event.preventDefault()
또는event.stopPropagation()
을 호출하는 메서드 대신 - 메서드가 DOM 이벤트에 대한 세부적인 처리 로직 없이 데이터 처리 로직만 있도록 수식어 사용
- 수식어끼리 연결 가능
- 이벤트에 핸들러 없이 수식어만 사용 가능
수식어 | 설명 |
---|---|
.stop | 이벤트 전파 중단, event.stopPropagation() 호출과 동일 |
.capture | CAPTURING_PHASE 단계에서만 이벤트 발생 |
.self | RASING_PHASE 단계일 때만 이벤트 발생, target이 자신일 경우 |
.prevent | event.preventDefault() 호출과 동일 |
.once | 이벤트가 단 한 번만 실행됨 |
.passive | 핸들러 내 event.preventDefault() 가 포함되었더라도 기본 동작 발생, .prevent 와 함께 사용하면 안 됨 |
⭐ 수식어를 연결할 때는 순서가 중요함,
@click.prevent.self
: 앨리먼트 자체와 그 자식에 대한 클릭 기본 동작 방지@click.self.prevent
: 앨리먼트 자체에 대한 클릭의 기본 동작만 방지
입력 키 수식어
- 입력 키 별칭
.enter
,.tab
,.delete
,.esc
,.space
,.up
,.down
,.left,
.right
- 시스템 입력 키 수식어
.ctrl
,.alt
,.shift
,.meta
- 마우스 버튼 수식어
.left
,.right
,.middle
@keyup.ctrl.enter="..."
(CTRL+ENTER 조합 시 이벤트 핸들러 호출) 처럼 연결 가능
exact 수식어
- 다른 수식어와 조합해 이벤트를 등록할 때
- 정확하게 일치하는 조합으로 이벤트가 일어나야 핸들러가 실행되도록 설정
- exact 를 사용하지 않을 때는 여러 조합에서 포함만 되어 있으면 동작함
<button @click.exact = "num=num+1" @click.ctrl.exact="num=num+10" @click.ctrl.alt.exact="num=num+100">
'Vue.js' 카테고리의 다른 글
HTML, SFC, Options, Composition - Vue.js (0) | 2025.03.26 |
---|---|
반응형 기초 - Vue.js (0) | 2025.03.22 |
계산된 속성(Computed Property) - Vue.js (0) | 2025.03.22 |
템플릿 문법 - Vue.js (0) | 2025.03.19 |
빌트인 디렉티브 - Vue.js (0) | 2025.03.19 |