```
## 이벤트 객체 접근
- 인라인 핸들러에서 event 객체에 접근 하기 위해서는 `$event` 를 인자로 추가해야한다
- arrow function 을 사용하는 경우, 특수문자를 쓰지 않아도 됨 (=event)
```js
methods: {
warn(message, event) {
// 이제 네이티브 이벤트 객체에 접근할 수 있습니다.
if (event) {
event.preventDefault()
}
alert(message)
}
}
// 특수한 키워드인 $event 사용 <button @click="warn('아직 양식을 제출할 수 없습니다.', $event)"> 제출하기
// 인라인 화살표 함수 사용 <button @click="(event) => warn('아직 양식을 제출할 수 없습니다.', event)"> 제출하기
## 이벤트 수식어
- `.stop` = `e.stopPropagation()`
- `.prevent` = `e.preventDefault()`
- `.capture` = 캡처 모드를 사용할 때 이벤트 리스너를 사용
- `.self` = 오로지 자기 자신만 호출할 수 있다. 즉, 타깃요소가 `self`일 때 발동
- `.once` = 해당 이벤트는 **한 번만** 실행
- 키 수식어
- `.enter`
- `.tab`
- `.delete` (”Delete”와 “Backspace” 키 모두를 수신합니다.)
- `.esc`
- `.space`
- `.up`
- `.down`
- `.left`
- `.right`
- 시스템 키 수식어
- - `.ctrl`
- `.alt`
- `.shift`
- `.meta` (mac의 cmd키, window의 win 키)
- `.exact` 수식어 (정확하게 해당 키만 사용 필요)
- ex) `<button @click.ctrl.exact="onCtrlClick">A</button>`
- 마우스 버튼 수식어
- `.left`
- `.right`
- `.middle`
# 양방향 바인딩
- `v-model` 로 아래 동작을 커버할 수 있음
- text, textarea : `value`, `@input`
- checkbox, radio : : `checked`, `change`
- select : `value`, `change`
- v-model modifiers
- `.lazy`, `.number`, `.trim`
```js
// App.vue
<script>
import CustomInput from './CustomInput.vue'
export default {
components: { CustomInput },
data() {
return {
message: 'hello'
}
}
}
</script>
<template>
<CustomInput
:model-value="message"
@update:model-value="newValue => message = newValue"/> // => v-model="message" 로 치환 가능
{{ message }}
</template>
// CustomInput.vue
<script>
export default {
props: ['modelValue'],
emits: ['update:modelValue'] // update시 prop 을 콜론 뒤에 사용하는 구문
}
</script>
<template>
<input
:value="modelValue"
@input="$emit('update:modelValue', $event.target.value)"
/>
</template>