상세 컨텐츠

본문 제목

[ Vue.js ] Component 에 v-model 값 적용하기 2 / 다중 v-model

FrontEnd/Vue.js

by SangHoonE 2023. 6. 13. 14:35

본문

반응형

안녕하세요 상훈입니다.

지난 포스팅에서 부모 -> 자식 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 이벤트 태그라고 생각합니다.

vue.js공식문서

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

 

관련글 더보기

댓글 영역