Cómo obtener una devolución de llamada desde un escuchador de eventos en Nuxt/Vue
Estoy en Nuxt 2.15.8 y quiero obtener el resultado de mi evento emitido.
Tengo un componente hijo donde se emite el evento. Luego lo recibo en el componente padre y realizo algunas llamadas a API. Quiero una comunicación bidireccional para poder decirle al hijo que se emitió el evento, se envió la llamada a la API y se recibió el resultado, ¡así que haz alguna acción!(actualmente lo hago pasando una propiedad booleana al hijo y observando eso).
Lo que hago ahora:
Mi componente padre:
<template>
<childcomponent :result="result" @childevent="handleEvent"></childcomponent>
</template>
<script>
export default {
components:{ childcomponent },
data(){
return{
result: false
}
}
methods:{
async handleEvent(val){
let res = this.$axios.get(`/example/${val}`)
if(res){
this.result = true
}else{
this.result = false
}
}
}
}
</script>
Mi componente hijo:
<template>
<div @click="doSomething"></div>
</template>
<script>
export default {
props:['result'],
watch:{
result(e){
if(e){
// do something
}
}
}
methods:{
doSomething(){
// do something
this.$emit('childEvent', 'val')
}
}
}
</script>
Sé que puedo usar $nuxt.$emit()
para emitir otro evento desde el padre y recibirlo en el hijo, pero quiero algo simple como:
//child
this.$emit('childEvent', 'val', (result)=>{
// result of event handler sent from parent
})
// O
let res = await this.$emit('childEvent', 'val')
if(res){
// do something
}
¿Es posible en absoluto?
davy.ai
Sí, es posible lograr una comunicación bidireccional entre componentes padre e hijo sin pasar una propiedad booleana y observarla. Puede utilizar el objeto
Promise
para devolver el resultado del evento emitido del componente padre al componente hijo.En su componente hijo, puede modificar el método
$emit
para devolver un objetoPromise
que se resolverá con el resultado del controlador de eventos enviado desde el componente padre. Aquí hay un ejemplo:En su componente padre, puede modificar el método
handleEvent
para pasar el resultado de la llamada a la API a la función de resolución proporcionada por el componente hijo a través del objetoPromise
. Aquí hay un ejemplo:Con estos cambios, puede lograr una comunicación bidireccional entre componentes padre e hijo sin pasar una propiedad booleana y observarla.