Comunicación entre Componentes
Comunicación de Hijo a Padre
Este patrón permite que un componente hijo avise al componente padre cuando ocurre una acción o cuando necesita comunicar un cambio.
Ejemplo
Avisar al componente padre cuando se pulsa un botón dentro del hijo.
VuedefineEmits
<script setup lang="ts">
import ChildButton from './ChildButton.vue'
function handleSave() {
alert('Saved in parent')
}
</script>
<template>
<ChildButton @save="handleSave" />
</template>
// ChildButton.vue
<script setup lang="ts">
const emit = defineEmits<{
save: []
}>()
</script>
<template>
<button @click="emit('save')">
Save
</button>
</template>
Usa defineEmits para declarar eventos del componente hijo y enviarlos al padre cuando ocurre una acción.
Reactcallback prop
function App() {
function handleSave() {
alert('Saved in parent')
}
return <ChildButton onSave={handleSave} />
}
// ChildButton.tsx
type ChildButtonProps = {
onSave: () => void
}
function ChildButton({ onSave }: ChildButtonProps) {
return (
<button onClick={onSave}>
Save
</button>
)
}
Recibe una función del padre como prop y la ejecuta desde el hijo para comunicar una acción.
Angularoutput()
import { Component } from '@angular/core'
import { ChildButtonComponent } from './child-button.component'
@Component({
selector: 'app-root',
standalone: true,
imports: [ChildButtonComponent],
template: `
<app-child-button (save)="handleSave()" />
`,
})
export class AppComponent {
handleSave() {
alert('Saved in parent')
}
}
// child-button.component.ts
import { Component, output } from '@angular/core'
@Component({
selector: 'app-child-button',
standalone: true,
template: `
<button (click)="save.emit()">
Save
</button>
`,
})
export class ChildButtonComponent {
save = output<void>()
}
Usa output() para exponer un evento desde el hijo y permitir que el padre reaccione desde el template.
