inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Vue3 완벽 마스터: 기초부터 실전까지 - "기본편"

Events

자식 컴포넌트에 input 태그, checkbox 같은 form 태그가 없으면 v-model 안 쓰는건가요?

580

jjkim0222

작성한 질문수 25

0

<!-- 부모.vue -->
<template>
  <custom-counter v-model="counterValue" />
<template>

<script>
  import CustomCounter from './CustomCounter.vue';
  
  export default {
    components: {
      CustomCounter,
    },

    data() {
      return {
        counterValue: 0,
      };
    },
};
</script>
<!-- CustomCounter.vue -->
<template>
  <div>
    <p>{{ message }}</p>
    <p>{{ value }}</p>
    <button @click="increment">+</button>
    <button @click="decrement">-</button>
  </div>
</template>

<script>
export default {
  props: {
    value: {
      type: Number,
      default: 0,
    },
  },
  data() {
    return {
      localValue: this.value,
    };
   },
   computed: {
     message() {
       return `The current value is ${this.localValue}`;
     },
   },
   methods: {
     increment() {
       this.localValue++;
     },	
      decrement() {
         this.localValue--;
       },
    },
    watch: {
      localValue(newValue) {
	 this.$emit('input', newValue);
       },
    },
};
</script>

 

이렇게 커스텀 컴포넌트에서 v-model을 사용할 때 만약에 자식 컴포넌트의 template에 input 태그 같은 게 없으면 사용 못 하는 건가요?

vue.js vuejs

답변 1

0

짐코딩

안녕하세요.

Q) v-model을 사용할 때 만약에 자식 컴포넌트의 template에 input 태그 같은 게 없으면 사용 못 하는 건가요?

아니요 v-model은 input 태그와 관계 없이 사용할 수 있습니다. 아래 다양한 예제가 있으니 참고하시면 좋을 것 같아요.

https://vuejs.org/guide/components/v-model.html

 

 

0

jjkim0222

https://vuejs.org/guide/components/v-model.html 에서는 input 태그 없이 v-model을 사용하는 예시가 없는데 혹시

input, checkbox, select/option 같은 태그 없이 <컴포넌트 v-model> 을 사용하는 예시를 들어주실 수 있나요?

0

짐코딩

안녕하세요.

modelValue propsupdate:modelValue emits을 잘 활용하시면 되는데요 아래 간단한 예제입니다.

// App.vue (부모 컴포넌트)
<template>
  <div>
    <Counter v-model="counter" />
    <button @click="counter++">parent click!!</button>
  </div>
</template>

<script setup>
import Counter from './components/Counter.vue';
import { ref } from 'vue';

const counter = ref(0);
</script>
// Counter.vue (자식 컴포넌트)
<template>
  <button @click="$emit('update:modelValue', modelValue + 1)">Click!! {{ modelValue }}</button>
</template>

<script setup>
defineProps({
  modelValue: {
    type: Number
  }
})
defineEmits(['update:modelValue'])
</script>

 

npm init vue@3.1.9

0

44

2

크롭 웹스토어 vue devtools 설치 관련

0

43

1

snippets 작성하는 부분 설명이 있었나요?

0

51

2

computed 의 set 함수를 통해 const 변수에 값을 담는 부분

0

59

2

소스 공유 어디서 해야하는지 궁금합니다

0

62

2

component 등록과 사용

0

59

2

강의교안

0

58

2

eslint 룰 관련 질문이 있습니다.

0

70

2

npm init -y 명령어 실행에 관한 질문

1

157

2

volar 가 마켓플레이스에 검색되지 않아 vue(official)을 설치했습니다.

1

171

2

깊은 감시자 질문

0

91

2

정리된 내용

0

158

2

화면이 왜 이렇게 뜨는걸까요?

0

188

2

왜 다르게 뜰까요..?ㅠㅠ

0

159

2

npm init vue , npm create vue@latest 명령 오류

0

295

2

강의를 듣다보니 궁금한 점 질문드립니다.

0

144

2

watch강의 질문

0

154

1

강의 듣다가 질문드립니다.

0

122

1

이벤트 처리 부분 강의 실습

0

141

2

v-pre는 설명이 없나요?

0

155

2

AppCard.vue 만들다 말고 오류가 갑자기 엄청 뜹니다

0

147

1

개발자도구 Vue 탭 관련 문의

0

244

2

강의를 인텔리제이로 수업따라가도 되져?

0

179

2

API 사용시 자동으로 import하는 기능은 어떤것을 설치해야 하나요?

3

283

2