๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[๊ฐœ๋ฐœ] Practice/Vue.js

[Vue.js] ์‚ฌ์šฉ์ž์˜ input ๋ฐ›์•„์˜ค๊ธฐ

by Connecting-the-dots 2022. 4. 3.
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ก ์‹ค์Šต ํฌ์ธํŠธ!

  • ์‚ฌ์šฉ์ž๊ฐ€ <input> ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์—ฌ๋Ÿฌ๊ฐ€์ง€ UI ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ค๋Š˜์€ ๊ทธ ์ค‘์— ์ƒํ’ˆ ์ˆ˜๋Ÿ‰ ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ๊ณผ ์ด ๊ธˆ์•ก ๊ณ„์‚ฐ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.

๐Ÿ’œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ •๋ณด๋ฅผ data ๋ณด๊ด€ํ•จ์— ์ €์žฅํ•ด๋ณด๊ธฐ

๐Ÿค <input> ์— ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€ ์ €์žฅํ•˜๊ธฐ

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ •๋ณด์— ๋”ฐ๋ผ์„œ ํŠน์ • ๋ถ€๋ถ„์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์œผ๋ฉด data ๋ณด๊ด€ํ•จ์— data ๋กœ ์ €์žฅํ•ด๋‘๊ณ  ํ•„์š”ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฐ”์ธ๋”ฉ์„ ํ•˜๋ฉด ๋œ๋‹ค.
<template>
	<input @input="months = $event.target.value">
    	<p>{{months}}๊ฐœ์›” ์„ ํƒ: {{ rooms[clickedRoom].price * months }}์›</p>
</template>

<script>
export default {
  data(){
    return {
      months : 0
    }
  }
}
</script>
  • ๋”ฐ๋ผ์„œ, ์‚ฌ์šฉ์ž๊ฐ€ <input> ์— ์ž…๋ ฅํ•œ ๊ฐ’์„ data ๋กœ ์ €์žฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.
  • @input ์€ @click ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์ธ๋ฐ, ๋‹ค๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ input ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ž…๋ ฅํ•  ๋•Œ ๋™์ž‘ํ•˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์ด๋‹ค.
  • @input ๊ณผ ์œ ์‚ฌํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋กœ๋Š” @change ๊ฐ€ ์žˆ๋‹ค.
  • $event ๋Š” Vue ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋ณ€์ˆ˜์ธ๋ฐ event object ๋ฅผ ๋œปํ•˜๋ฉฐ, JavaScript ์—์„œ addEventListener('click', function(e){ }) ์™€ ๊ฐ™์ด ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ๋Š” ํ•˜๋Š”๋ฐ ์—ฌ๊ธฐ์„œ์˜ e ์™€ ๋™์ผํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ, $event.target.value ๋ผ๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด <input> ์— ์ž…๋ ฅํ•œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ์ด์ œ, ์‚ฌ์šฉ์ž๊ฐ€ <input> ์— ์ž…๋ ฅํ•œ ๊ฐ’์ด data ๋ณด๊ด€ํ•จ์˜ months ์— ์ €์žฅ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  <p></p>์— <input> ์— ์ž…๋ ฅ๋œ ์ˆซ์ž๋ฅผ months ์— ์ €์žฅํ•œ ํ›„ ๋ถˆ๋Ÿฌ์™€์„œ, months ์— ๊ฐ€๊ฒฉ์„ ๊ณฑํ•˜์—ฌ, ๊ฐœ์›” ์ˆ˜์— ๋”ฐ๋ฅธ ์ด ๊ธˆ์•ก์„ ๊ณ„์‚ฐํ•ด์ฃผ๋„๋ก ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์—ˆ๋‹ค.

๐Ÿ“Œ @input ๋Œ€์‹  v-model ์‚ฌ์šฉํ•˜๊ธฐ

// @input ์‚ฌ์šฉ
<input @input="months = $event.target.value"> 

// v-model ์‚ฌ์šฉ
<input v-model="months">
  • Vue ์—๋Š” @input ๋Œ€์‹ ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” v-model ์ด๋ผ๋Š” ๋ฌธ๋ฒ•์ด ์žˆ๋‹ค.
  • v-model ์€ v-model ์ด๋ผ๋Š” ์ฝ”๋“œ๊ฐ€ ์ ํžŒ html ํƒœ๊ทธ์— ์ž…๋ ฅ๋œ ๊ฐ’์„ ๋”ฐ์˜ดํ‘œ ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ์ด๋ฆ„์˜ data ๋ณด๊ด€ํ•จ์— ์ €์žฅํ•ด๋‹ฌ๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.
    (์ฐธ๊ณ ๋กœ, <input> ์™ธ์— <textarea>,<select> ์—๋„ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, <input type="checkbox"> ์™€ ๊ฐ™์ด ํƒ€์ž…์„ ๋ณ€๊ฒฝํ•ด๋„ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.)
  • ๋”ฐ๋ผ์„œ, ์œ„ ๋‘ ์ฝ”๋“œ๋Š” ๋˜‘๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋‘ ์ฝ”๋“œ ๋ชจ๋‘ <input> ์— ์ž…๋ ฅ๋œ ๊ฐ’์€ String ํƒ€์ž…์— ํ•ด๋‹นํ•˜๋ฏ€๋กœ, ์ˆซ์ž๊ฐ€ ์ž…๋ ฅ๋˜์–ด๋„ ๋ฌธ์ž๋กœ ์ €์žฅ์ด ๋œ๋‹ค.
  • ๊ทธ๋ž˜์„œ ์ˆซ์ž๋กœ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด v-model ์˜ ๊ฒฝ์šฐ์—๋Š” v-model.number="months" ์™€ ๊ฐ™์ด directive ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ ์ˆซ์ž๋กœ ๋ณ€ํ™˜๋งŒ ํ•˜์—ฌ ์ €์žฅํ•ด์ฃผ๋Š” ๊ฒƒ์ผ ๋ฟ ๋ฌธ์ž์˜ ์ž…๋ ฅ์„ ๋ง‰์•„์ฃผ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ผ๋Š” ์ ์„ ๊ธฐ์–ตํ•ด์•ผ ํ•œ๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•