LoginSignup
0
1

More than 3 years have passed since last update.

Vue.jsで子コンポーネントから親コンポーネントへデータを渡す方法

Last updated at Posted at 2020-03-23

VueやNuxtを使っていて、子コンポーネントから親コンポーネントへ値を渡したい時の方法について記述します。
親→子はpropsを使えばいいのですが、子→親は少しトリッキーなやり方になりますので。

結論

$emit(eventName,[...args])

を使います
$emitについてはこちら

サンプル

サンプル画面

ezgif.com-crop.gif

サンプルコード

parent.vue
<template>
    <div>
        <h1></h1>
        コメント:{{ comment }}
        <hr>
        <h2></h2>
        //@childの「child」は子コンポーネントの第一引数で指定されたもの
        <child :comment="comment" @child="changeComment"></child>
    </div>
</template>
<script>
import child from '~/components/child.vue'

export default {
    components: {
        child
    },
    data() {
        return {
            comment: "テスト"
        }
    },
    methods: {
        //$emitの第二引数の値はここで受け取っている
        changeComment(childComment) {
            this.comment = childComment
        }
    }
}
</script>
components/child.vue
<template>
    <div>
        <input v-model="childComment" type="text">
        <input type="button" value="親コメントを変更する" @click="change">
    </div>
</template>
<script>
export default {
    data() {
        return{
            childComment:''
        }
    },
    methods: {
        change() {
            //$emitの第一引数でイベントの名前を指定、第二引数で値を渡す
            this.$emit('child', this.childComment)
        }
    }
}
</script>

解説

子コンポーネントの$emitでイベント名(child)を指定して、第二引数に親コンポーネントに渡したい値を指定します。
親コンポーネント側では指定されたイベント(child)で動くmethodであるchangeCommentで第二引数で指定された値を受け取ります。

最後に

子コンポーネントから親に値を渡して親の値を変更したいといった場面も意外にあるかと思います。そんな時にこの記事がお役に立てれば幸いです。

0
1
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
0
1