Два способа вызова метода дочернего компонента из родительского в vue.js

Чтобы вызвать метод дочернего компонента из родительского компонента в Vue.js, вы можете использовать передачу событий или ссылки на компоненты. Вот пример использования ссылок на компоненты:

Родительский компонент:

<template>
  <div>
    <button @click="callChildMethod">Call Child Method</button>
    <child-component ref="childRef"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  methods: {
    callChildMethod() {
      // Access the child component instance using $refs
      this.$refs.childRef.childMethod();
    }
  }
};
</script>Code language: JavaScript (javascript)

Дочерний компонент:

<template>
  <div>
    <p>Child Component</p>
  </div>
</template>

<script>
export default {
  methods: {
    childMethod() {
      console.log('Child method called from parent');
      // Add your child component logic here
    }
  }
};
</script>Code language: JavaScript (javascript)

В родительский компонент дочерний компонент включается с помощью тега  и ему присваивается ссылка с помощью атрибута ref (ref= "childRef"). Внутри метода callChildMethod родительского компонента this.$refs.childRef используется для доступа к экземпляру дочернего компонента, а затем к дочернему методу (childMethod()). в этом примере).

Используя ссылки на компоненты ($refs), вы можете напрямую получить доступ к методам и свойствам дочернего компонента из родительского компонента.

Вот пример использования $emit:

Родительский компонент:

<template>
  <div>
    <button @click="callChildMethod">Call Child Method</button>
    <child-component @custom-event="handleChildEvent"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  methods: {
    callChildMethod() {
      this.$refs.childRef.$emit('custom-event', 'Hello from parent!');
    },
    handleChildEvent(payload) {
      console.log('Event received from child: ', payload);
      // Handle the event in the parent component
    }
  }
};
</script>Code language: JavaScript (javascript)

Дочерний компонент:

<template>
  <div>
    <p>Child Component</p>
  </div>
</template>

<script>
export default {
  mounted() {
    this.$emit('custom-event', 'Hello from child!');
  }
};
</script>Code language: JavaScript (javascript)

Использование $emit позволяет запускать пользовательские события в дочернем компоненте и обрабатывать их в родительском компоненте.

Ссылка: https://vuejs.org/guide/comComponents/events.html#event-arguments