Comunicación entre Componentes en Vue: Emisión y Manejo de Eventos
Clase 18 de 38 • Curso Básico de Vue.js 2
Contenido del curso
- 4

Renderizado Declarativo en JavaScript: Estado y Vista Sincronizados
02:09 - 5

Uso de Expresiones JavaScript en Plantillas de Vue.js
02:06 - 6

Directivas para Atributos Dinámicos en HTML con Vue.js
06:44 - 7

Directivas de Renderizado Condicional en HTML con Vue.js
05:02 - 8

Uso de la Directiva v-for en Vue.js para Renderizar Listas
05:48 - 9

Manejo de Eventos en Vue.js: Click y Mouseover
07:04 - 10

Condiciones y Clases Dinámicas en Vue.js
06:46 - 11

Estilos Dinámicos en JavaScript: Cambios de Color Interactivos
02:49 - 12

Propiedades Computadas y Watchers en Vue.js
05:42 - 13

Interacción dinámica con formularios y directivas en Vue.js
03:34 - 14
"Crear un Tracker de Cursos con Vue.js"
00:45
- 15

Sistema de Componentes en Fren Word: Modularización y Reutilización
02:54 - 16

Creación de Componentes Personalizados en Vue.js
06:44 - 17

Comunicación entre Componentes en Vue.js: Props y Data Binding
17:28 - 18

Comunicación entre Componentes en Vue: Emisión y Manejo de Eventos
06:17 - 19

Uso de Slots para Inyectar HTML en Componentes Hijos
04:18 - 20

Ciclo de Vida de Componentes en Vue.js
03:40 - 21

Componentes de Vue: Creación y Gestión Eficiente
01:23 - 22
Componente Modal y Componente Principal en Vue.js
00:44
- 27

Instalación y configuración de Tailwind CSS en proyectos HTML
06:40 - 28

Creación y Gestión de Componentes VUE en Proyectos Web
12:02 - 29

Creación de Aplicaciones SPA con Vue Router
15:37 - 30

Uso de Fetch API para Interactuar con Servidores HTTP
15:45 - 31

Filtros y Directivas para Mejorar Interfaces en JavaScript
09:33 - 32

Creación de Rutas Dinámicas en Vue.js para Criptomonedas
21:36 - 33

Navegación Dinámica y Programática en Vue.js
12:23 - 34

Integración de Componentes de Terceros en Proyectos Vue.js
12:01 - 35

Manejo de Problemas de Reactividad en Vue.js
17:44 - 36

Filtros y Ordenamiento en Tablas de Datos con JavaScript
11:25 - 37

Implementación de Rutas Dinámicas y Conversor de Criptomonedas en Vue.js
13:38
¿Cómo los componentes hijos envían datos a sus componentes padres?
Entender cómo se comunican los componentes en una aplicación es crucial para su correcta implementación. Cuando un componente hijo necesita enviar información a su componente padre, se utilizan eventos. Este tipo de comunicación permite mantener la coherencia en los estados de los componentes y garantiza que las propiedades definidas en el componente padre no sean alteradas directamente por el hijo.
- Las propiedades de un componente padre no deben ser modificadas por un componente hijo.
- La notificación de cambios se realiza mediante eventos emitidos desde el componente hijo.
- La comunicación de padre a hijo se realiza a través de propiedades, mientras que de hijo a padre se hace mediante eventos.
¿Cómo emitir eventos desde un componente hijo?
Para posibilitar que un componente hijo informe al padre sobre un cambio, es necesario emitir un evento. Este proceso es fundamental para asegurar que el componente padre pueda reaccionar adecuadamente sobre cualquier modificación en el componente hijo.
Ejemplo de emisión de evento
Vamos a ilustrar este proceso con un ejemplo simple donde se modifica el color de fondo de un elemento al realizar un 'touch':
-
Definir la propiedad en el padre:
- La propiedad
colorse define en el componente padre, y el componente hijo no tiene acceso directo a esta.
- La propiedad
-
Emisión del evento desde el hijo:
- En el componente hijo, utilizar una función llamada
emitpara emitir un evento, en este caso,@emit('changeColor').
- En el componente hijo, utilizar una función llamada
this.$emit('changeColor');
- Escuchar el evento en el padre:
- En el archivo HTML del componente padre, usar la directiva
@para escuchar este evento.
- En el archivo HTML del componente padre, usar la directiva
<my-component @changeColor="handleChangeColor"></my-component>
- Definir la función manejadora en el padre:
- Implementar la lógica que responde al evento dentro de la instancia del componente padre.
methods: {
handleChangeColor(newColor) {
if (newColor) {
this.color = newColor;
} else {
// Revertir al color original si no se proporciona uno nuevo
this.color = 'originalColor';
}
}
}
¿Cómo enviar valores con eventos?
Al emitir un evento, es posible adjuntar un valor que acompañe al evento, permitiendo al componente padre recibir directamente el nuevo valor que debe establecer.
- Utilizando un segundo argumento en la función
emitpara enviar el nuevo color al padre:
this.$emit('changeColor', 'blue');
- En el método del padre, recibir este argumento como parámetro y decidir qué acción tomar:
methods: {
handleChangeColor(newColor) {
this.color = newColor || this.defaultColor;
}
}
¿Cómo mantener componentes aislados?
En el contexto de aplicaciones con múltiples instancias de un mismo componente, es sumamente importante que cada instancia mantenga su estado propio y aislado.
Aislamiento de componentes
- Cada componente debe tener su propia copia de los datos. Esto se logra declarando
datacomo una función que devuelve un objeto:
data() {
return {
color: 'defaultColor'
};
}
- Al asegurar que
datadevuelve un objeto en cada instancia, garantizamos que los componentes no compartan el estado, evitando así la interferencia entre ellos.
Esta metodología permite que, aunque se tengan múltiples componentes similares en una página, cada uno mantenga y gestione su propio estado, asegurando un comportamiento predecible y sin conflictos.