LoginSignup
14
10

More than 5 years have passed since last update.

【Vue】親子間での双方向バインディング

Posted at

親子間でのデータの受け渡しには

  • 親→子:props
  • 子→親:emit

で受けわたすのが通例だが、これを使わなくても v-model で双方向バインディングを行うことが可能。

親ページ

データは親ページに持たせる。
今回は仮に form として、

index.vue
<hoge-form v-model="form"/>

子コンポーネントのカスタムタグに v-model="form" を渡す。

子コンポーネント

HogeForm.vue
  model: {
    prop: 'user',
    event: 'input'
  },
  props: {
    user: {
      type: Object,
      default: null,
    },

親ページでわたした form が、子ページに propsvalue という名前で入ってくるようになるので、子ページでも {{value.user_name}} とデータが使えるようになる。
value という名前じゃ気持ち悪い、というのであれば上記のように model ディレクティブで名前を変更することが可能。

注意点

子コンポーネントのディレクティブで event='input' となっているように、フォームデータのバインディングはinput時のみ実行される。
なので、手入力なら問題ないがボタンを押すことでデータ入るような場合は検知してくれない。

そのため、 v-model のみでフォームデータの入力内容を親に渡すと場合によってはinput以外での入力データについては取りこぼしがでてしまうこともある。
なので、念のため最後に emit で親ページへデータを渡すようにしたほうがよい。

14
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
10