Comunicación entre Componentes en Vue: Eventos de Hijo a Padre
Clase 28 de 53 • Curso Profesional de Vue.js 2
Resumen
¿Cómo enviar información desde un componente hijo hacia un componente padre en Vue.js?
Al trabajar con Vue.js, la comunicación entre componentes puede ser crucial para el funcionamiento de tu aplicación. Mientras que pasar datos desde un componente padre a un hijo se logra usando propiedades (props), el camino inverso —de un hijo a un padre— se realiza mediante eventos. Aquí te guiamos sobre cómo establecer esta comunicación.
¿Cómo emitir eventos desde un componente hijo?
Emitir un evento desde un componente hijo permite que el componente padre "escuche" y reaccione a acciones específicas iniciadas por el hijo. Aquí te mostramos cómo lograrlo:
-
Agregar directiva
v-on
: Empezamos por adjuntar un evento a un elemento, como un botón dentro del componente hijo. Esto se puede hacer con la directivav-on
o usando el atajo@
. Por ejemplo:<button @click="selectTrack">Play</button>
-
Crear el método para manejar el evento: En el objeto
methods
del componente, definimos la función que llamaremos con el evento:methods: { selectTrack() { this.$emit('select', this.trackId); } }
-
Usar
$emit
para emitir un evento: Utilizamos el método$emit()
para enviar el evento al componente padre. El primer argumento de$emit
es el nombre del evento y el segundo es la información que deseamos pasar, en este casotrackId
.
¿Cómo escucha el componente padre el evento emitido por el hijo?
Una vez que el hijo emite el evento, el componente padre debe estar listo para capturarlo y responder adecuadamente. Aquí te explicamos cómo hacerlo:
-
Usar la directiva
v-on
para escuchar eventos: Dentro del componente padre, escuchamos el evento utilizando la directivav-on
:<Track @select="setSelectedTrack" />
-
Definir el método correspondiente en el padre: En el objeto
methods
del componente padre, creamos una función para manejar el evento recibido:methods: { setSelectedTrack(id) { this.selectedTrack = id; } }
-
Actualizar el estado del componente padre: Dentro del método, actualizamos el estado o realizamos acciones basadas en la información obtenida del evento.
¿Cómo mejorar el código con Vue.js y estilos CSS?
La reactividad y el manejo de estilos son elementos esenciales en las aplicaciones Vue.js. Aquí te ofrecemos algunos consejos para mejorar la interacción y presentación de tus componentes:
-
Destacar elementos seleccionados: Utiliza clases CSS para resaltar el componente seleccionado. Por ejemplo, puedes aplicar una clase
isActive
usando v-bind:<template> <div :class="{ isActive: t.id === selectedTrack }" v-for="t in tracks"> <!-- contenido --> </div> </template>
-
Usar
scoped
en estilos CSS: Para evitar que los estilos CSS afecten globalmente, utiliza el atributoscoped
en tus etiquetas<style>
:<style scoped> .content { min-height: 40px; } </style>
¿Por qué es importante la comunicación padre-hijo y viceversa?
La comunicación entre componentes de un proyecto Vue.js es esencial para mantener la inmutabilidad y reactividad de los props. Las props no deben modificarse directamente en el hijo. Por lo tanto, siempre que sea necesario actualizar algo que influya en el padre, el hijo debe notificar a través de eventos. Este modelo de comunicación asegura una aplicación Vue.js estructurada, eficiente y fácil de mantener.