カスタムコンポーネント内でv-modelを使用するには、以下の手順に従います。
- 親コンポーネントで、v-modelディレクティブを使用して子コンポーネントにデータをバインドします。具体的には、v-modelに親コンポーネントのデータプロパティを指定します。
<template>
<div>
<custom-component v-model="childData"></custom-component>
</div>
</template>
<script>
export default {
data() {
return {
childData: ''
};
}
};
</script>
- 子コンポーネントで、propsオプションを使用して親コンポーネントからデータを受け取ります。また、inputイベントを使用して親コンポーネントにデータの変更を通知します。子コンポーネント内でのデータの実際の変更は、子コンポーネントの内部で行います。
<template>
<div>
<input :value="value" @input="updateValue" />
</div>
</template>
<script>
export default {
props: ['value'],
methods: {
updateValue(event) {
this.$emit('input', event.target.value);
}
}
};
</script>
このようにすることで、親コンポーネントと子コンポーネントの間でデータが双方向にバインドされます。親コンポーネントでchildDataの値が変更されると、子コンポーネントのinputフィールドにも反映され、逆もまた同様です。
以下は、上記の手順を使用してv-modelをカスタムコンポーネントに適用する例です。
<template>
<div>
<custom-component v-model="childData"></custom-component>
<p>親コンポーネントの値: {{ childData }}</p>
</div>
</template>
<script>
import CustomComponent from './CustomComponent.vue';
export default {
components: {
CustomComponent
},
data() {
return {
childData: ''
};
}
};
</script>
この例では、親コンポーネントのchildDataというデータがカスタムコンポーネントにバインドされています。親コンポーネントのchildDataの値が変更されると、カスタムコンポーネントのinputフィールドに反映され、親コンポーネント内のp要素でも表示されます。
以上が、カスタムコンポーネントでv-modelを使用する方法の基本的な解説です。この方法を使用することで、カスタムコンポーネントでも簡単に双方向データバインディングを実現することができます。