Есть дочерний компонент с некой логикой валидации такого вида:
ThePersonalDetailsListData.vue
<template>
<div></div>
</template>
<script setup>
import {ref, defineEmits } from 'vue';
const getValidate = () => {
console.log('validate');
}
const emit = defineEmits(['form-validation']);
emit('form-validation', getValidate);
</script>
так же есть родитель:
App.vue
<template>
<TheFormNavigation @open-modal="openModalAndSendData"/>
<form>
<router-view></router-view>
</form>
</template>
<script setup>
import {ref} from 'vue'
import TheFormNavigation from './components/TheFormNavigation.vue';
const validation = (getValidation) => { // нужно что то типа такого
if (typeof getValidation === 'function') {
getValidation();
}
}
const openModalAndSendData = () => {
validation();
}
</script>
и другой дочерний компонент для
App.vue в котором есть кнопка отправляющая данные на сервер:
TheFormNavigation.vue
<template>
<button @click="getValidate">Click</button>
</template>
<script setup>
import { ref, defineEmits } from 'vue';
const emit = defineEmits('open-modal');
function openModal() {
emit('open-modal');
}
</script>
Суть в том что мне в компоненте
App.vue нужно запустить функцию
getValidate()
из дочернего компонента
ThePersonalDetailsListData.vue. Но я не понимаю как это можно реализовать, ведь кнопка находится в компоненте
TheFormNavigation.vue при клике по которой я эмитирую событие родителю
App.vue и вызываю функцию
openModalAndSendData()
, а функция
getValidate()
находится в компоненте, который является дочерним для
App.vue , но по сути никак не связан с компонентом навигации. Вот такая иерархия на данный момент:
Возможно ли это реализовать, EventBus?
Это нужно для того, чтобы при клике по кнопке отправки формы
<BaseButton>
отработала валидация
getValidate(),
если так захочется серверу.