---
# System prepended metadata

title: 2. 할 일 관리 앱 - 추가 기능 구현
tags: [지호, Vue.js + TypeScript 완벽 가이드]

---

# 2. 할 일 관리 앱 - 추가 기능 구현

###### tags: `지호`, `Vue.js + TypeScript 완벽 가이드`

---

## 1. emit 이벤트
```javascript=
// input 이벤트: 키보드 이벤트
<input id="todo-input" type="text" :value="item" @input="handleInput" />
    
// input emit 이벤트: 다른 컴포넌트에게 이벤트를 전달  
handleInput(event: any) {
     event.target.value;
     this.$emit("input", event.target.value);
}
```

참고: https://kr.vuejs.org/v2/guide/components-custom-events.html

<br/>

## 2. 개념 정리 및 비교

![image](https://user-images.githubusercontent.com/24283401/163358608-853639c0-172e-45ad-8fd7-7178cb703694.png)

### props & emit
특정 컴포넌트 사이에서의 이벤트 전달
- props: 부모 컴포넌트에서 자식 컴포넌트로 데이터 전달
- emit: 자식 컴포넌트에서 부모 컴포넌트로 이벤트를 보냄
    - 부모컴포넌트에선 @를 사용하여 해당 이벤트를 받음

### v-model
- v-bind + v-on
- input, select, textarea에서 사용 가능
- 내부적으로 value값을 내려줘서 input값으로 끌어올림
    - `@input`
    - `:value`
- 한/일/중어에서 입력값 처리에 딜레이가 있음
참고: https://joshua1988.github.io/web-development/vuejs/v-model-usage/

### v-bind
- 하나의 컴포넌트 내에서 데이터 바인딩

<br/>


## 3. input 속성 유효성 검사 및 타입 정의

- props의 type와 required 지정
- as를 이용하여 이벤트 타겟 타입 구체화

![image](https://user-images.githubusercontent.com/24283401/163359684-8f480824-fb98-443f-a425-c48a0a35c28c.png)

<br/>



