양방향 데이터 (Two way binding) 바인딩
단방향 데이터 바인딩은 일방적으로 한 쪽에서 한 쪽으로 데이터를 주는 것.
예를 들면 v-for 에서 Vue 인스턴스의 값을 component에게 주기만 했던 것을 생각하면 된다.
반대로 양방향 데이터 바인딩은 Vue 인스턴스와 component가 서로의 데이터에 접근하는 것을 말한다.
vue에서는 v-model 디렉티브를 이용하여 양방향 데이터 바인딩을 할 수 있다.
양방향 데이터 바인딩의 대표적인 예제는 form을 다루는 것이다.
v-model은 state 값을 꼭 사용해야 한다. props로 내려받은 값을 바로 v-model에서 사용할 수는 없다.
input 을 사용한 예제)
// App.vue
<template>
<div>
<h1>{{ title }}</h1>
<input v-model="title">
</div>
</template>
<script>
export default {
data() {
return {
title: ""
};
}
};
</script>
<style>
</style>
state에 title을 등록해놓고 input 태그에서 v-model로 title을 사용한다.
h1 태그에서는 title state로 내용을 나타낸다.
input 태그에 입력한 값이 그대로 h1 태그에 표시된다.
input 태그에 값이 입력되면
title state가 그 값으로 업데이트 되고
업데이트 된 state값이 h1 태그에 그대로 적용이 되는 것이다.
checkbox를 이용한 예제)
// App.vue
<h2>웹툰</h2>
<div>
<input type="checkbox" id="프롬스타" value="프롬스타" v-model="checkedWebtoons">
<label for="프롬스타">프롬스타</label>
<input type="checkbox" id="햄스터와그녀" value="햄스터와 그녀" v-model="checkedWebtoons">
<label for="햄스터와그녀">햄스터와 그녀</label>
<input type="checkbox" id="위대한로맨스" value="위대한 로맨스" v-model="checkedWebtoons">
<label for="위대한로맨스">위대한 로맨스</label>
<input type="checkbox" id="아귀" value="아귀" v-model="checkedWebtoons">
<label for="아귀">아귀</label>
<br>
<span>찜한 웹툰: {{ checkedWebtoons }}</span>
</div>
<script>
export default {
data() {
return {
title: "",
checkedWebtoons: [],
};
}
};
</script>
state에 checkedWebtoons를 등록해놓고 input 태그의 checkbox에 v-model로 checkedWebtoons를 사용했다.
체크를 하게 되면 역시 state에 value가 추가되고 span 태그에서 해당 값들을 나타나게 된다.
RadioBox 를 이용한 예제)
// App.vue
<h2>성별</h2>
<input type="radio" id="male" value="male" v-model="gender">
<label for="male">남</label>
<br>
<input type="radio" id="female" value="female" v-model="gender">
<label for="female">여</label>
<br>
<span>당신의 성별을 알려주세요: {{ gender }}</span>
<script>
export default {
data() {
return {
title: "",
checkedWebtoons: [],
gender: ""
};
}
};
</script>
성별을 선택하면 그대로 state에 적용이 되어 즉각적으로 값이 반영된다.
SelectBox 예제)
// App.vue
<h2>선호 장르</h2>
<select v-model="category">
<option disabled value>선택해주세요</option>
<option>로맨스</option>
<option>호러</option>
<option>스릴러</option>
</select>
<span>선택: {{ category }}</span>
<script>
export default {
data() {
return {
title: "",
checkedWebtoons: [],
gender: "",
category: ""
};
}
};
</script>
'Vue.js' 카테고리의 다른 글
03 인스턴스 & 컴포넌트 - 뷰 컴포넌트 (0) | 2022.11.11 |
---|---|
03 인스턴스 & 컴포넌트 - 뷰 인스턴스 (0) | 2022.11.11 |
v-if, v-show 를 이용한 조건부 렌더링 (0) | 2022.11.03 |
v-for 를 이용한 리스트 렌더링 (0) | 2022.10.26 |
State와 Props (0) | 2022.10.26 |