2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Vue.jsのコンポーネント間でデータを受け渡す方法

Posted at

親から小へデータを受け渡す方法 【 :man::boy:

・子コンポーネント :boy:

Child.vue
<template>
  <!-- 親コンポーネントから値を受け取るための箱を用意する -->
  <p>{{ value }}</p>
</template>

<script>
export default {
  // 親コンポーネントから値を受け取る為に、propsを定義する(複数定義することも可)
  props: ["value"],
}
</script>

・親コンポーネント :man:

Parent.vue
<template>
  <div>
    <!-- 子コンポーネント側で定義したpropsのプロパティに、
         データを入れて子コンポーネントへ渡す(動的に値を変更する場合は、「v-bind」を使う) -->
    <Child value="親から子へ"></Child>
  </div>
</template>

<script>
// 子コンポーネントをインポート
import Child from './components/Child'

export default {
  /* template内でコンポーネントが利用できるように、
     componentsプロパティに子コンポーネントをセット */
  components: {
    Child,
  }
}
</script>

子から親へデータを受け渡す方法 【 :boy::man:

・子コンポーネント :boy:

Child.vue
<template>
  <div>
    <!-- 親コンポーネントから値を受け取るための箱を用意する -->
    <p>{{ value }}</p>
    <!-- ボタンを押した時に、親コンポーネント側でカスタムイベントを発火 -->
    <button @click="change">値を変更</button>
  </div>
</template>

<script>
export default {
  // 親コンポーネントから値を受け取る為に、propsを定義する(複数定義することも可)
  props: ["value"],
  methods: {
    change() {
      // 親コンポーネントへ値を送る為のカスタムイベントを作成
      this.$emit("receive", this.value = "子から親へ");
    }
  }
}
</script>

・親コンポーネント :man:

Parent.vue
<template>
  <div>
    <!-- 子コンポーネントのボタンが押されると、
         親コンポーネントのカスタムイベントが発火する -->
    <Child value="親から子へ" @receive="changeValue"></Child>
  </div>
</template>

<script>
// 子コンポーネントをインポート
import Child from './components/Child';

export default {
  /* template内でコンポーネントが利用できるように、
     componentsプロパティに子コンポーネントをセット */
  components: {
    Child,
  },
  methods: {
    // 子コンポーネントで定義した$emitの第2引数を受け取る
    changeValue(value) {
      // 値を入れ替える
      this.value = value;
    }
  }
}
</script>

HTMLコードを子コンポーネントへ受け渡す方法 【 :page_facing_up::boy:

・子コンポーネント :boy:

Child.vue
<template>
  <div>
    <!-- 受け口としてslotタグを配置
         親コンポーネント側のHTMLがslotタグと置き換わる -->
    <slot></slot>
  </div>
</template>

・親コンポーネント :man:

Parent.vue
<template>
  <div>
    <!-- 送り口として、コンポーネントタグ内にHTMLを記述 -->
    <Child>
      <h1>HTMLを</h1>
      <h2>子コンポーネントへ</h2>
    </Child>
  </div>
</template>

<script>
// 子コンポーネントをインポート
import Child from './components/Child';

export default {
  /* template内でコンポーネントが利用できるように、
     componentsプロパティに子コンポーネントをセット */
  components: {
    Child,
  },
}
</script>
2
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?