본문 바로가기
Vue/정리

[Vue] 사용자 입력 연결

by oda 2022. 12. 22.

v-model

- 사용자의 입력을 Vue 인스턴스의 데이터에 연결

- Vue인스턴스의 데이터가 웹 페이지에 표시되고 웹 페이지에서 입력한 값이 Vue인스턴스의 데이터에 반영되므로

  양방향 바인딩 이라고도 한다.

- <태그명 v-model="프로퍼티명">


input태그 - text

- input태그의 텍스트를 Vue인스턴스 데이터와 연결하면 사용자가 텍스트를 입력하고 있는 중에도 데이터는 갱신된다.

- <input v-model="프로퍼티명">

<h2>입력한 문자열을 표시하는 예제</h2>
<div id="app">
    <input v-model="myName" placeholder="이름">
    <p>나는 {{ myName }} 입니다.</p>
</div>

<script>
    new Vue({
        el: '#app',
        data: {
            myName:''
        }
    })
</script>

 

input태그 - radio

- input 태그의 라디오 버튼값을 Vue 인스턴스의 데이터로 연결할 수 있다.

- v-model에 동일한 프로퍼티명을 지정하면 하나의 그룹으로 묶인다.

- value값을 통해 어떤것이 선택되었는지 전달된다.

- img태그의 src속성의 값과 radio의 value값을 연결하면 라디오버튼의 선택값에 따라 이미지를 변경할 수 있다.

- <input type="radio" value="값1" v-model="동일한프로퍼티명(같은그룹)">

<div id="app">
    <h2>선택한 라디오 버튼을 표시하는 예제</h2>
    <label><input type="radio" value="red" v-model="picked" /> 적 </label>
    <label><input type="radio" value="green" v-model="picked" /> 녹 </label>
    <label><input type="radio" value="blue" v-model="picked" /> 청 </label>
    <p>{{ picked }} 이 선택됨</p>

    <h2>이미지 출력을 라디오버튼으로 변경하는 예제</h2>
    <label><input type="radio" value="face1.png" v-model="fileName" /> face1 </label>
    <label><input type="radio" value="face2.png" v-model="fileName" /> face2 </label>
    <br />
    <p>{{ fileName }} 선택</p>
    <p> <img v-bind:src="fileName" /> </p>
</div>

<script>
    new Vue({
        el: '#app',
        data: {
            picked: 'red',
            fileName: "",
        }
    })
</script>

 

input태그 - checkbox

- input태그의 체크박스 값을 Vue 인스턴스의 데이터와 연결할 수 있다.

- 값은 true/false 로 불린값이다. 

- 체크박스 하나의 값을 데이터와 연결할 수 있으며 복수의 체크박스 값을 데이터와 연결할 수 도 있다.

- <ipnut type="checkbox" v-model="프로퍼티명">

<div id="app">
    <h2>체크박스의 ON/OFF를 확인하는 예제</h2>
    <label>
        <input type="checkbox" v-model="myCheck"> 체크박스의 상태는 {{ myCheck }}
    </label>  
    
    <h2>복수 체크박스의 ON을 배열로 만드는 예제</h2>
    <label><input type="checkbox" value="red" v-model="myChecks" /> 적 </label>
    <label><input type="checkbox" value="green" v-model="myChecks" /> 녹 </label>
    <label><input type="checkbox" value="blue" v-model="myChecks" /> 청 </label>
    <br />
    선택한 색은 {{ myChecks }}
</div>

<script>
    new Vue({
        el: '#app',
        data: {
            myCheck: false,
            myChecks:[]
        }
    })
</script>

 

button 태그

- 버튼 태그의 v-bind:disable을 체크박스값을 이용하여 설정하면 버튼 활성/비활성을 지정할 수 있다.

- <button v-bind:disable="프로퍼티명(true/false)"></button>

<h2>동의에 체크하면 송신 버튼이 활성화 되는 예제</h2>
<div id="app">
    <label><input type="checkbox" v-model="myAgree" >
    동의합니다.</label>
    <button v-bind:disabled="myAgree==false">송신</button>
</div>

<script>
    new Vue({
        el: "#app",
        data: {
            myAgree: false
        }
    })
</script>

 

textarea태그

- textarea태그의 복수행 텍스트를 Vue인스턴스의 데이터로 연결할 수 있다.

- 입력과 동시에 데이터는 갱신된다.

- {{프로퍼티명.length}}를 이용하면 입력한 데이터의 글자 수를 알 수 있다.

- <textarea v-model="프로퍼티명"></textarea>

<h2>입력한 문장과 문자수를 표시하는 예제</h2>
<div id="app">
    <textarea  v-model="myText"></textarea>
    <p>문장은,「{{ myText }}」</p>
    <p>문자수는 {{ myText.length }} 자입니다.</p>
</div>

<script>
    new Vue({
        el: '#app',
        data: {
            myText:'오늘 날씨 좋습니다.'
        }
    })
</script>

 

select태그

- select 태그의 값을 Vue 인스턴스의 데이터와 연결하는것도 가능하다.

- 선택한 하나의 값만 Vue 인스턴스 데이터와 연결된다.

- 복수의 값을 선택하고 싶다면 multiple을 적어야한다.

- <select v-model="프로퍼티명"> <option> 선택값 1 </option> </select>

- <select v-model="프로퍼티명 multiple> <option> 선택값 1 </option></select>  <!-- 복수의 값을 선택할때 -->

<div id="app">
    <h2>문자열이 선택한 색으로 변하는 예제</h2>
    <select v-model="myColor">
        <option disabled value="">색을 선택해 주세요</option>
        <option>red</option>
        <option>green</option>
        <option>blue</option>
        <option>orange</option>
        <option>brown</option>
    </select>
    <p v-bind:style="{color: myColor}">선택한 색상은 {{ myColor }} 입니다. </p>

    <h2>복수의 선택을 배열로 처리하는 예제</h2>
    <select v-model="myColor2" multiple style="width:150px">
        <option>red</option>
        <option>green</option>
        <option>blue</option>
        <option>orange</option>
        <option>brown</option>
    </select>
    <p>선택한 색은 {{ myColor2 }} 입니다.</p>
</div>

<script>
    new Vue({
        el: '#app',
        data: {
            myColor: '',
            myColor2: []
        }
    })
</script>

 

수식어

- v-model에 수식어를 붙이면 몇가지 기능을 지정하는 것이 가능하다.

- 다 쓰고나서 vue 인스턴스에 입력하고 싶을 때 :  <input v-model.lazy="프로퍼티명">

- 입력 내용을 자동으로 수식으로 변경하고 싶을 때 : <input v-model.number="프로퍼티명">

- 앞뒤 공백을 자동으로 제거하고 싶을 때 : <input v-model.trim="프로퍼티명">

<div id="app">
    <h2>다 쓴 후 입력 예제</h2>
    <input v-model.lazy="myTextLazy" />
    <p>입력후 표시「{{ myTextLazy }}」</p>

    <h2>입력을 자동으로 수식으로 변경하는 예제</h2>
    <input v-model.number="myTextNumber1" type="number" />
    <p>100을 더해서 표시「{{ 100 + myTextNumber1 }}」</p>

    <h2>입력을 자동으로 수식으로 변경하지 않는 예제</h2>
    <input v-model="myTextNumber2" type="number" />
    <p>
    100을 더해서 표시「{{ 100 + myTextNumber2 }}」 <!-- 입력받은 값이 숫자가 아닌 문자로 인식됨 -->
    </p>
    
    <h2>앞뒤의 공백을 자동으로 제거하는 (트림) 예제</h2>
    <input v-model.trim="myTextTrim1" />
    <p>앞뒤 공백을 제거「{{ myTextTrim1 }}」</p>
    
    <h2>앞뒤의 공백을 자동으로 제거(트림) 하지 않는 예제</h2>
    <input v-model="myTextTrim2">
    <p>앞뒤의 공백을 제거「{{ myTextTrim2 }}」</p>
</div>

<script>
new Vue({
    el: '#app',
    data: {
        myTextLazy: "",
        myTextNumber1: 0,
        myTextNumber2: 0,
        myTextTrim1: "",
        myTextTrim2: ""
    }
})
</script>

'Vue > 정리' 카테고리의 다른 글

[Vue] 조건문  (0) 2022.12.23
[Vue] 이벤트 연결  (0) 2022.12.22
[Vue] 속성 지정  (0) 2022.12.21
[Vue] 데이터의 종류  (0) 2022.12.21
[Vue] 인스턴스  (0) 2022.12.21

댓글