Language/Vue.js

[Vue] 사용자의 input을 받는 법 (v-model)

JJcoding 2024. 5. 5. 17:43

모달창 안에 사용자가 살고자 하는 개월 수를 입력하는 칸을 만들어보자. (Model.vue에서 진행)

<input @change="">
<input @input="">

--> @change는 입력하고 커서를 다른 곳에 찍으면 실행해주세요. 라는 의미이고,
     @input은 입력할 때마다 실행해주세요. 라는 의미이다.

사용자가 input 에 입력한 값을 데이터로 저장하려면 먼저 저장할 공간을 만들어준다.

export default {
    name: 'Modal_',
    data() {
        return {
            month : 1,
        }
    },
    props: {
        원룸들 : Array,
        누름 : Number,
        modalOpen : Boolean,
    }
}

--> month 라는 데이터를 만들어주고

<template>
<div class="black-bg" v-if="modalOpen == true">
    <div class="white-bg">
        <h4>{{ 원룸들[누름].title }}</h4>
        <p>{{ 원룸들[누름].content }}</p>
        <input @input="month = $event.target.value">
        <p> {{ month }}개월 선택함 : {{ 원룸들[누름].price * month }}원</p>
        <button @click="$emit('closeModal')">닫기</button>
    </div>
</div>
</template>

--> @input = "month = $event.target.value" 를 통해 month에 사용자가 입력한 데이터를 저장할 수 있다.

 

결과물

 

이 때 v-model 문법을 사용하면 위 코드를 간단하게 줄일 수 있다.

<template>
<div class="black-bg" v-if="modalOpen == true">
    <div class="white-bg">
        <h4>{{ 원룸들[누름].title }}</h4>
        <p>{{ 원룸들[누름].content }}</p>
        <!-- <input @input="month = $event.target.value"> -->
        <input v-model="month">
        <p> {{ month }}개월 선택함 : {{ 원룸들[누름].price * month }}원</p>
        <button @click="$emit('closeModal')">닫기</button>
    </div>
</div>
</template>

--> input v-model="month"과 같이 v-model="데이터이름"을 써주면 데이터가 자동으로 저장된다. 아까랑 똑같은 결과!

        <textarea v-model="month"></textarea>
        <select v-model="month"></select>
        <input type="checkbox" v-model="month">

--> 다른 여러 input 태그에도 v-model을 사용할 수 있다.

* 참고로 데이터 초기값이 중요하다. 초기값에 따라 데이터가 저장되지 않기도 한다.
여기에선 month를 1(숫자)로 초기값 설정을 해서 'ㄱㄴㄷㄹ'과 같은 문자는 저장이 되지 않는다.


* 사용자가 <input>에 입력한 것은 전부 문자자료형으로 저장이 된다. 123 이라고 저장해도 '123' 이라는 뜻!
따라서 사용자에게 받은 값을 어떠한 계산을 위해 반드시 숫자형으로 바꿔야 한다면

        <input v-model.number="month">

--> 이렇게 v-model.number 를 사용해서 숫자로 바꿔주면 된다.

 

출처 : 코딩애플