カスタムコンポーネントでのv-modelの使用方法


カスタムコンポーネント内でv-modelを使用するには、以下の手順に従います。

  1. 親コンポーネントで、v-modelディレクティブを使用して子コンポーネントにデータをバインドします。具体的には、v-modelに親コンポーネントのデータプロパティを指定します。
<template>
  <div>
    <custom-component v-model="childData"></custom-component>
  </div>
</template>
<script>
export default {
  data() {
    return {
      childData: ''
    };
  }
};
</script>
  1. 子コンポーネントで、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を使用する方法の基本的な解説です。この方法を使用することで、カスタムコンポーネントでも簡単に双方向データバインディングを実現することができます。