Vue.js

폼 입력과 데이터를 연결할 때 쓰는 v-model (Vue.js)

john_ 2022. 12. 22. 12:52
728x90
폼 입력과 데이터를 연결 할때는 v-model을 사용합니다.

v-model 디렉티브는 input태그, select 태그, textarea 태그를 사용합니다.

 

기본형)
  <태그명 v-model="프로퍼티명">

 

코드를 작성 해보겠습니당

<body>
  <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>
  
</body>
</html>
출력결과

 


체크박스 : input checkbox

체크박스의 값을 Vue 데이터와 연결합니다.
기본형)
   <labe><input type="checkbox" v-model="프로퍼티명"> 어쩌구 </label>
체크박스의 on/off 를 확인합니다.
  <h2> 체크박스의 on/off를 확인하는 예제</h2>
  <div id="app">
    <label><input type="checkbox" value="check" v-model="myCheck">
    체크박스의 상태는 {{ myCheck }}</label>
  </div>

  <script>
    new Vue({
      el: '#app',
      data:{
        myCheck:false
      }
    })
  </script>
출력결과

 


체크박스를 누르면 해당 체크박스의 값을 출력할수있습니다.
  <h2>복수 체크박스의 on을 배열로 만드는 예제</h2>
  <div id='app'>
    <label><input type="checkbox" value="red" v-model="myChecks">적색</label><br>
    <label><input type="checkbox" value="green" v-model="myChecks">녹색</label><br>
    <label><input type="checkbox" value="blue" v-model="myChecks">청색</label><br>
    선택한 색은 <br> {{myChecks}}
  </div>

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

 

출력결과

 


 

동의에 체크하면 송신버튼이 활성화 되게 할수있습니다.
  <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>
출력결과

 


선택한 radio 버튼을 표시할수 있습니다.
<body>
  <h2>선택한 라디오 버튼을 표시하는 예제</h2>
  <div id="app">
    <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>
  </div>

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

 

출력결과

 


 

이미지 출력을 라디오 버튼으로 변경하여 나타낼수 있습니다.
<body>
  <h2>이미지 출력을 라디오 버튼으로 변경하는 예제</h2>
  <div id="app">
    <label><input type="radio" value="images/4.jpg" v-model="fileName">몽실1</labe><br>
    <label><input type="radio" value="images/5.jpg" v-model="fileName">몽실2</labe><br>
    <label><input type="radio" value="images/6.jpg" v-model="fileName">몽실3</labe><br>
    <label><input type="radio" value="images/7.jpg" v-model="fileName">몽실4</labe><br>
    <p> {{ fileName }} </p>
    <img v-bind:src="fileName"></img>
  </div>

  <script>
    new Vue({
      el:'#app',
      data:{
        fileName:''
      }
    })
  </script>
출력결과

 


 

문자열이 select의 옵션으로 인해 설정된 색으로 변하게 할수 있습니다.
  <h2>문자열이 선택한 색으로 변하는 예제</h2>
    <div id="app">
      <select v-model="myColor">
        <option disabled value="">색을 선택해 주세요</option>
        <option>red</option>
        <option>orange</option>
        <option>yellow</option>
        <option>green</option>
        <option>skyblue</option>
        <option>blue</option>
        <option>purple</option>
      </select>
      <p v-bind:style="{color:myColor}">선택한 색상은 {{ myColor }} 입니다.</p>
    </div>
    
    <script>
      new Vue({
        el: "#app",
        data: {
          myColor:'',
        }
      })
    </script>
출력예시

 

해당 코드에 select의 v-model뒤에 multiple을 부여하면 여러 옵션을 동시선택이 가능합니다.

 

  <h2>문자열이 선택한 색으로 변하는 예제</h2>
    <div id="app">
      <select v-model="myColor" multiple>
        <option disabled value="">색을 선택해 주세요</option>
        <option>red</option>
        <option>orange</option>
        <option>yellow</option>
        <option>green</option>
        <option>skyblue</option>
        <option>blue</option>
        <option>purple</option>
      </select>
      <p>선택한 색상은 {{ myColor }} 입니다.</p>
    </div>
    
    <script>
      new Vue({
        el: "#app",
        data: {
          myColor:'',
        }
      })
    </script>

 

이렇게 나옵니당!

 

 


수식어

입력이 끝나고 Vue인스턴스 데이터에 입력 하고싶을때
<input v-model.lazy="프로퍼티명">

 

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

 

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

 


입력이 끝난후, focus가 벗어날때 입력이 되게 할때의 코드입니다.
<body>
  <h2>다 쓴 후 입력이 되는 예제</h2>
  <div id="app">
    <input v-model.lazy="myText">
    <p>입력 후 표시 「{{ myText }}」</p>
  </div>
  
  <script>
    new Vue({
      el:'#app',
      data:{
        myText:''
      }
    })
  </script>

짠 ! focus가 out 되지않으면 출력 되지 않습니다!

 


입력을 자동으로 수식으로 받아서 계산까지 가능하게 하는 예제입니다.

 

  <h2>입력을 자동으로 수식으로 변경하게 하는 예제</h2>
    <div id="app">
      <input v-model.number="myNumber" type="number">
      <p>100을 더해서 표시 「{{ myNumber + 100 }}」</p>
    </div>
  
    <script>
      new Vue({
        el:'#app',
        data:{
          myNumber:0
        }
      })
    </script>
</body>

이런식으로 출력이 되네요!

 


 

앞 뒤의 공백을 제거할수도 있습니다!
  <h2>앞 뒤의 공백을 자동으로 제거(trim)하는 예제</h2>
  <div id="app">
    <input v-model.trim="myText">
    <p>앞뒤 공백을 제거 「{{ myText }}」</p>
  </div>

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

앞뒤의 공백이 제거됩니다!

 


마무리 실습.

따라 출력해보세요!

 

 

 

<body>
  <h2>입력폼 활용</h2>
  <div id="app">
    <p>이름 : <input type="text" v-model.lazy="myName" placeholder="홍길동"></p>
    <p>좋아하는 색은 :  {{ myColor }}<br><br>
    <label><input type="radio" value="red" v-model="myColor">빨강<br></label>
    <label><input type="radio" value="green" v-model="myColor">녹색<br></label>
    <label><input type="radio" value="blue" v-model="myColor">파랑<br></label>
    <label><input type="radio" value="yellow" v-model="myColor">노랑<br></label>
    <label><input type="radio" value="gray" v-model="myColor">회색<br></label>
    <p>제 이름은 {{myName}} 이고, 좋아하는 색은 {{ myColor }}입니다. </p>
  </div>
  
  <script>
    new Vue({
      el:"#app",
      data:{
        myColor: '',
        myName:'',
      }
    })
  </script>
</body>
</html>

 

728x90