Vue ๊ณต์ ๊ฐ์ด๋ ๋ฌธ์์์ v-model์ ์์ ์ ์ฒ๋ฆฌ, ๋ค์ค(multiple) v-model ์ฌ์ฉ๋ฒ์ ๋ํด์ ๋์์๋ค.
ํ๋์ v-model ์์ ์๋ฅผ ์ด์ฉํด set, get๊ณผ ๊ฐ์ ์ต์ ์ ์ฌ์ฉํ๋๋ฒ์ด ์๊ฐ ๋์ง๋ง, ๋ค์ค v-model์ ์ฌ์ฉํ์ ๋, ์์ ์๋ฅผ ๋ฐ๋ ๋ฐ์๋ง ์๊ฐ๋๊ณ set๊ณผ ๊ฐ์ ์ต์ ์ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋น ์ ธ์์ด ์ถ๊ฐ ํด๋ณธ๋ค.
composition ์คํ์ผ ์งํฅํด์ composition ๋ฐฉ์์ผ๋ก๋ง ์๊ฐ ํฉ๋๋ค.
๐ค ์์ ์ฝ๋ ::: ๊ณต์ ๊ฐ์ด๋ 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
'''