Programming/Vue

[Vue] Multiple v-model ์ˆ˜์ •์ž(modifiers) ์ฒ˜๋ฆฌํ•˜๊ธฐ(์˜ต์…˜ ์‚ฌ์šฉํ•˜๊ธฐ)

Space_Jin 2024. 8. 13. 14:25
728x90
๋ฐ˜์‘ํ˜•

Vue ๊ณต์‹ ๊ฐ€์ด๋“œ ๋ฌธ์„œ์—์„œ v-model์˜ ์ˆ˜์ •์ž ์ฒ˜๋ฆฌ, ๋‹ค์ค‘(multiple) v-model ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๋‚˜์™€์žˆ๋‹ค.

 

ํ•˜๋‚˜์˜ v-model ์ˆ˜์ •์ž๋ฅผ ์ด์šฉํ•ด set, get๊ณผ ๊ฐ™์€ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š”๋ฒ•์ด ์†Œ๊ฐœ ๋˜์ง€๋งŒ, ๋‹ค์ค‘ v-model์˜ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ, ์ˆ˜์ •์ž๋ฅผ ๋ฐ›๋Š” ๋ฐ›์‹๋งŒ ์†Œ๊ฐœ๋˜๊ณ  set๊ณผ ๊ฐ™์€ ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ๋น ์ ธ์žˆ์–ด ์ถ”๊ฐ€ ํ•ด๋ณธ๋‹ค.

 

composition ์Šคํƒ€์ผ ์ง€ํ–ฅํ•ด์„œ composition ๋ฐฉ์‹์œผ๋กœ๋งŒ ์†Œ๊ฐœ ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ v-model ์ˆ˜์ •์ž ํ™œ์šฉ(์˜ต์…˜ ์‚ฌ์šฉ)

 

 

multiple v-model ์ˆ˜์ •์ž ์ •์˜

 

 

๐Ÿค– ์˜ˆ์ œ ์ฝ”๋“œ ::: ๊ณต์‹ ๊ฐ€์ด๋“œ playground ์˜ˆ์ œ๋ฅผ ํ™œ์šฉ

<script setup>
import { ref } from 'vue'
import MyComponent from './MyComponent.vue'
  
const firstText = ref('')
const secondText = ref('')
</script>

<template>
  <MyComponent 
    v-model:first.capitalize="firstText" 
    v-model:second.capitalize="secondText" 
  />
</template>

App.vue

<script setup>
const [first, modifiers1] = defineModel('first', {
    set(value) {
    if (modifiers1.capitalize) {
      return value.charAt(0).toUpperCase() + value.slice(1)
    }
    return value
  }
})

const [second, modifiers2] = defineModel('second', {
    set(value) {
    if (modifiers2.capitalize) {
      return value.charAt(0).toLowerCase() + value.slice(1)
    }
    return value
  }
})

</script>

<template>
  first: <input type="text" v-model="first" />
  <br/>
  second: <input type="text" v-model="second" />
</template>

MyComponent.vue

 

์œ„ ์ฝ”๋“œ๋Š” 2๊ฐœ์˜ input๊ณผ v-model์„ ๊ฐ–๋Š” Mycomponent.vue๋ฅผ App.vue์—์„œ import ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

 

์˜ต์…˜์˜ ์‚ฌ์šฉ๋ฒ•์€ defineModel() ๋งคํฌ๋กœ์˜ ๋‘๋ฒˆ์งธ ์ธ์ž์— ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

๊ธฐ๋Šฅ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

'''

first๋ผ๋Š” name์„ ๊ฐ€์ง„ v-model์ด capitalize๋ผ๋Š” ์ˆ˜์ •์ž๋ฅผ ๊ฐ€์ง€๋ฉด, ์ฒซ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ set ํ›„ return

second๋ผ๋Š” name์„ ๊ฐ€์ง„ v-model์ด capitalize๋ผ๋Š” ์ˆ˜์ •์ž๋ฅผ ๊ฐ€์ง€๋ฉด, ์ฒซ๊ธ€์ž๋Š” ์†Œ๋ฌธ์ž๋กœ set ํ›„ return

'''

 

๊ฒฐ๊ณผ

 

728x90
๋ฐ˜์‘ํ˜•