Как правильно в vue3 передать событие из дочернего компонента в родительский?

Для передачи событий из дочернего компонента в родительский в Vue.js 3 можно использовать новый синтаксис, основанный на директиве v-on. Этот синтаксис был введен вместо v-on:, который использовался в более ранних версиях Vue.

Итак, чтобы передать событие из дочернего компонента в родительский, необходимо выполнить следующие шаги:

1. В дочернем компоненте создайте событие с помощью метода emits. Например, если вы хотите передать событие myEvent, напишите следующую строку кода в своем компоненте:

emits: ['myEvent']

2. В дочернем компоненте назначьте событию метод, который будет вызван при его возникновении. Например:

methods: {
  handleClick() {
    this.$emit('myEvent', 'Hello from child component!');
  }
}

3. В родительском компоненте добавьте слушатель события, определенного в дочернем компоненте. Сделать это можно с помощью директивы v-on. Например:

<template>
  <div>
    <ChildComponent v-on:myEvent="handleEvent" />
  </div>
</template>

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

export default {
  components: {
    ChildComponent
  },
  methods: {
    handleEvent(message) {
      console.log(message);
    }
  }
}
</script>

В этом примере мы добавляем дочерний компонент <ChildComponent> и назначаем обработчик события handleEvent, который принимает сообщение от дочернего компонента и выводит его в консоль.

4. В дочернем компоненте вызовите метод, который инициирует событие при возникновении необходимого события. Например, чтобы вызвать событие myEvent, добавьте следующую строку кода в место, где это нужно:

<button @click="handleClick">Click me</button>

При нажатии на кнопку в дочернем компоненте будет вызван метод handleClick, который в свою очередь вызовет событие myEvent с переданным сообщением.

В результате, при возникновении события в дочернем компоненте, оно будет передано в родительский компонент, где вы сможете обработать его с помощью метода handleEvent или другим способом, соответствующим вашим требованиям.