【Vue3】v-modelとは?使い方を紹介する
v-modelとは?
v-modelは、フォームの入力要素(inputなど)に入力された値を同期的に使用するために使います。
Vue3対応です。
v-modelが使える要素は、
- input
- select
- textarea
- オリジナルコンポーネント
があります。
この記事を書いた人
@takasqr アプリケーション開発が大好きなエンジニア。Vue、Swift、Electrom などでアプリを作って公開している。AWS や Firebase などのクラウドサービスも好き。
使い方
基本形
基本的な使い方です。
<script>
import { ref } from 'vue'
export default {
setup() {
let inputData = ref('')
return {
inputData
}
}
}
</script>
<template>
<input v-model="inputData" />
<p>inputData : {{ inputData }}</p>
</template>
v-modelはシンタックスシュガー
下のコードは同じ動きをします。
<input
v-on:input="inputData = $event.target.value"
v-bind:value="inputData"
/>
<input v-model="inputData" />
自作のコンポーネントで使う
親コンポーネント。
<script>
import { ref } from 'vue'
import VModelChildren from './VModelChildren.vue'
export default {
components: { VModelChildren },
setup() {
let inputData = ref('')
return {
inputData
}
}
}
</script>
<template>
<VModelChildren v-model="inputData" />
<p>inputData : {{ inputData }}</p>
</template>
子コンポーネント。
<script>
export default {
props: ['modelValue'],
emits: ['update:modelValue']
}
</script>
<template>
<input
:value="modelValue"
@input="$emit('update:modelValue', $event.target.value)"
/>
</template>
複数の値をv-modelでバインディングする
カスタムコンポーネントを使ってる時などに、複数の値をv-modelで使いたくなるかもしれません。
Vue3から一つの要素に複数の値をv-modelできるようになりました。
<script>
import { ref } from 'vue'
import VModelChildren from './VModelChildren.vue'
export default {
components: { VModelChildren },
setup() {
let height = ref('')
let weight = ref('')
return {
height,
weight
}
}
}
</script>
<template>
<VModelChildren v-model:height="height" v-model:weight="weight" />
<p>height : {{ height }}</p>
<p>weight : {{ weight }}</p>
</template>
<script>
export default {
props: {
height: String,
weight: String
},
emits: ['update:height', 'update:weight']
}
</script>
<template>
<input
:value="height"
@input="$emit('update:height', $event.target.value)"
/>
<input
:value="weight"
@input="$emit('update:weight', $event.target.value)"
/>
</template>