# κ²°ν•©λ ₯ 높은 μ»΄ν¬λ„ŒνŠΈ

두 번째 μ»΄ν¬λ„ŒνŠΈ λ””μžμΈ νŒ¨ν„΄μ˜ 핡심은 v-model λ””λ ‰ν‹°λΈŒμž…λ‹ˆλ‹€. v-model의 λ‚΄λΆ€κ°€ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ΄ν•΄ν•˜κ³  이λ₯Ό μ‘μš©ν•˜μ—¬ μ’€ 더 κ²°ν•©λ ₯이 높은 μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€μ–΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

# v-model λ””λ ‰ν‹°λΈŒ

v-model λ””λ ‰ν‹°λΈŒλŠ” μ–‘λ°©ν–₯ 데이터 바인딩을 μ§€μ›ν•˜λŠ” μ†μ„±μž…λ‹ˆλ‹€. μ–‘λ°©ν–₯ 데이터 λ°”μΈλ”©μ΄λž€ ν™”λ©΄μ˜ 데이터와 λ·° μΈμŠ€ν„΄μŠ€μ˜ 데이터가 항상 μΌμΉ˜ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. μ½”λ“œλ₯Ό λ³΄κ² μŠ΅λ‹ˆλ‹€.

<template>
  <input type="text" v-model="inputText">
</template>

<script>
export default {
  data() {
    return {
      inputText: 'hi'
    }
  }
}
</script>

μœ„ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ 인풋 λ°•μŠ€μ˜ 초기 κ°’μœΌλ‘œ 'hi'κ°€ μ§€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 그리고 인풋 λ°•μŠ€μ˜ λ‚΄μš©μ„ λ°”κΎΈλ©΄ inputText의 값도 같이 λ°”λ€λ‹ˆλ‹€. ν•΄λ‹Ή λ‚΄μš©μ€ λ·° 개발자 λ„κ΅¬μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

# v-model λ””λ ‰ν‹°λΈŒμ˜ λ™μž‘ 방식

그럼 μœ„μ—μ„œ v-model λ””λ ‰ν‹°λΈŒκ°€ μ–΄λ–»κ²Œ λ·° μΈμŠ€ν„΄μŠ€μ˜ 데이터와 정보λ₯Ό μ£Όκ³  λ°›μ•˜μ„κΉŒμš”? v-model λ””λ ‰ν‹°λΈŒμ˜ λ‚΄λΆ€λŠ” μ•„λž˜μ™€ 같은 ꡬ쑰둜 λ™μž‘ν•©λ‹ˆλ‹€.

<template>
  <input type="text" :value="inputText" @input="inputText = $event.target.value">
</template>

<script>
export default {
  data() {
    return {
      inputText: 'hi'
    }
  }
}
</script>

inputText의 값을 :value에 μ—°κ²°ν•˜κ³  인풋 λ°•μŠ€μ˜ μž…λ ₯을 λͺ¨λ‘ $event.target.value둜 inputText에 λ„£μŠ΅λ‹ˆλ‹€. μœ„μ˜ μ½”λ“œλŠ” v-model λ””λ ‰ν‹°λΈŒμ™€ λ™μΌν•˜κ²Œ λ™μž‘ν•©λ‹ˆλ‹€.

TIP

μœ„μ™€ 같은 μ½”λ“œλŠ” μ»€μŠ€ν…€ λ””λ ‰ν‹°λΈŒλ₯Ό μž‘μ„±ν•  λ•Œ 많이 μ‚¬μš©λ©λ‹ˆλ‹€.

# v-model둜 체크 λ°•μŠ€ μ»΄ν¬λ„ŒνŠΈ λ§Œλ“€κΈ°

μ•žμ—μ„œ μ‚΄νŽ΄λ³Έ v-model둜 HTML 인풋 체크 λ°•μŠ€λ₯Ό μ»΄ν¬λ„ŒνŠΈν™” ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. λ¨Όμ € μƒμœ„ μ»΄ν¬λ„ŒνŠΈμΈ App.vue의 μ½”λ“œμž…λ‹ˆλ‹€.

<!-- App.vue -->
<template>
  <check-box v-model="checked"></check-box>
</template>

<script>
import CheckBox from './CheckBox.vue';

export default {
  components: {
    CheckBox
  },
  data() {
    return {
      checked: false,
    }
  }
}
</script>

μ΄μ–΄μ„œ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈλ‘œ λ“±λ‘λœ CheckBox.vue의 μ½”λ“œλ₯Ό λ³΄κ² μŠ΅λ‹ˆλ‹€.

<!-- CheckBox.vue -->
<template>
  <input type="checkbox" :value="value" @click="toggle">
</template>

<script>
export default {
  props: ['value'],
  methods: {
    toggle() {
      this.$emit('input', !this.value);
    }
  }
}
</script>

μœ„ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜μ—¬ 체크 λ°•μŠ€λ₯Ό ν΄λ¦­ν•˜λ©΄ checked 값이 μ •μƒμ μœΌλ‘œ trueμ—μ„œ false둜 μ „ν™˜λ˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.