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

VueAdvent Calendar 2023

Day 12

【Vue.js Composition API】子コンポーネントで定義したメソッドを別の子コンポーネントから呼び出す

Posted at

はじめに

ある子コンポーネントで定義したメソッドを別の子コンポーネントで使いたかったので、親コンポーネントを経由して受け渡ししました。

環境

  • Vue.js 3.2
  • Composition API

前提知識

子から親へメソッドを渡すのに defineExpose を使用します。

子で発生したイベントを検知して、親のメソッドを呼び出すには emit を使用します。

実装

Child1コンポーネントに定義されたメソッドを、Child2コンポーネントのボタンが押されたときに呼び出しています。

親コンポーネント

Parent.vue
<script setup>
import { ref } from "vue";
import Child1 from "./Child1.vue";
import Child2 from "./Child2.vue";

// Child1コンポーネントの情報を受け取る
const child1Ref = ref();

const callChild1Method = () => {
  // Child1コンポーネントのメソッドを呼び出す
  child1Ref.value.child1Method();
};
</script>

<template>
  <div>
    <Child1 ref="child1Ref" />
    <Child2 @doEmit="callChild1Method()" />
  </div>
</template>

子(Child1)コンポーネント

Child1.vue
<script setup>
// Parentに渡しChild2から呼び出されるメソッドを定義
const child1Method = () => {
  console.log("child1コンポーネントのメソッドが呼ばれた!");
};

// Parentからの呼び出しを可能にする
defineExpose({ child1Method });
</script>

子(Child2)コンポーネント

Child2.vue
<script setup>
// emitを定義しイベントの発火を親が検知できるようにする
const emit = defineEmits(["doEmit"]);
</script>

<template>
  <div>
    <button @click="emit('doEmit')">Child1のメソッドを呼ぶ</button>
  </div>
</template>

おわりに

Vue.jsにまだ慣れていないので、他にもっと良い方法がある気がします、、

もしよければ、コメント欄でご教示いただけますと幸いです。

参考

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