[ Vue.js ] Component 에 v-model 값 적용하기 2 / 다중 v-model
안녕하세요 상훈입니다.
지난 포스팅에서 부모 -> 자식 v-model 값을 전달할 수 있게 코딩하는 것을 언급하였었는데,
오늘은 여러 개의 v-model 을 props 로 내려주는 내용을 포스팅 하려고 합니다.
2023.06.12 - [FrontEnd/Vue.js] - [ Vue.js ] Component 에 v-model 값 적용하기 1(이전포스팅)
[ Vue.js ] Component 에 v-model 값 적용하기 1
안녕하세요 상훈입니다. Vue.js 3 - composition API 에서 특정 컴포넌트에 v-model 값을 내려주는 방법을 포스팅하도록 하겠습니다. 필요요소 : 부모컴포넌트, 자식컴포넌트 소스 확인(링크를 통해 작성
code-hoon.tistory.com
필요요소: 부모컴포넌트, 자식컴포넌트
마찬가지로 부모컴포넌트와 자식컴포넌트가 필요합니다.
1. 부모컴포넌트
<script setup>
import CustomInput from './CustomInput.vue'
import {ref} from 'vue'
const message = ref('')
const message2 = ref('')
</script>
<template>
메시지: {{ message }} <br/>
메시지2: {{ message2 }} <br />
<CustomInput v-model:message="message" v-model:message2="message2" />
</template>
자식 컴포넌트에 v-model 로 message, message2 를 각각 내려주었습니다.
2. 자식 컴포넌트
<script setup>
const props = defineProps({
message: String,
message2: String
})
const emits = defineEmits(['update:message', 'update:message2'])
const updateInputs = (e, type) => {
emits(`update:${type}`, e.target.value)
}
</script>
<template>
<input
:value="message"
@input="updateInputs($event,'message')"
style="margin-top: 20px;"
/>
<textarea
:value="message2"
@input="updateInputs($event,'message2')"
></textarea>
</template>
defineProps 로 message, message1 을 받아오기
defineEmits 로 emit 을 설정해주기
@input 태그 이벤트에 updateInputs 메서드를 연동. 값이 변할 때마다 부모 컴포넌트로 값 상신해주기
이중에서 핵심은 @input 이벤트 태그라고 생각합니다.
v-model 을 쪼개보면 위 이미지와 같이 쪼개지는 것을 알 수 있습니다.
v-bind -> value
@input -> event (user-custom-event)
결과
코드 공유 - Vue Playground
Vue SFC Playground
play.vuejs.org
Component v-model | Vue.js
ko.vuejs.org