Comunicación entre Componentes en Angular: Estrategias para Compartir Datos y Eventos

Componentes en Angular (II)

Rodrigo Bosarreyes
4 min readJun 25, 2023
Compartir datos entre componentes. Photo by Elaine Casap on Unsplash.

En una aplicación Angular, a menudo es necesario que los componentes se comuniquen entre sí. La comunicación entre componentes permite compartir datos, eventos y funcionalidades entre partes diferentes de la aplicación. En este artículo, exploraremos las diferentes formas de lograr una comunicación efectiva entre componentes en Angular.

Comunicación mediante Propiedades

Una forma común de comunicación entre componentes es mediante el uso de propiedades. Puedes pasar datos de un componente padre a un componente hijo a través de propiedades de entrada. Para ello, sigue estos pasos:

  • En el componente hijo, declara una propiedad de entrada utilizando la anotación @Input(). Por ejemplo:
  • En el componente padre, en el template donde se utiliza el componente hijo, enlaza la propiedad de entrada con una expresión. Por ejemplo:

Los corchetes en las propiedades input de un componente se utilizan para establecer una comunicación unidireccional entre componentes padre e hijo, permitiendo que el componente padre pase valores al componente hijo y actualice las propiedades de este en consecuencia. OJO: la sintaxis para realizar un “property binding” desde el HTML se debe hacer entre corchetes [] con una expresión TypeScript, es decir, podemos todo lo que vaya dentro de las comillas dobles es código TS, como invocar una función, una variable o un dato primitivo.

De esta manera el componente hijo será capaz de “observar” la propiedad del padre, pero si esta variable sufrir una modificación desde el hijo el valor de la variable en el componente padre no se verá afectada.

Comunicación mediante Eventos

Otra forma de comunicación entre componentes es a través de eventos. Puedes hacer que un componente hijo emita un evento y el componente padre puede suscribirse a ese evento para tomar alguna acción. Para ello, sigue estos pasos:

  • En el componente hijo, declara una propiedad utilizando la anotación @Output().
  • En este mismo componente, cuando ocurre un cambio relevante, emitimos un evento invocando el método emit de la propiedad Output pasándole como parámetro el nuevo valor. Por ejemplo:
  • En el componente padre, en el template donde se utiliza el componente hijo, suscríbite al evento utilizando el binding de evento, para ello debemos encapsular el nombre de la propiedad entre paréntesis () y como vimos en las propiedades de entrada podemos definir una función o invocar una existe. Por ejemplo:

Nota: Es importante destacar las diferentes formas de property bindings que existen, recordemos que los corchetes []se utilizan para los propiedades de entrada, mientras que los paréntesis ()para las propiedades de salida o eventos.

Protip: Personalmente, pensar que para enlazar un input tengo que “encerrarlo en una caja” [] y que un output es una especie de onda expansiva () que “expulsa” un valor me ayudó a memorizarlo rápidamente.

Comunicación mediante un Servicio Compartido

La limitación de la comunicación de los puntos anteriores es que la relación debe ser directa, es decir, debe ser componente a componente. Si por ejemplo tenemos vamos componentes anidados, un padre, un hijo y un nieto y queremos comunicar al padre con el nieto debemos pasar por el hijo.

Si los componentes no están directamente relacionados, una opción es utilizar un servicio compartido para la comunicación. El servicio actúa como un intermediario entre los componentes y puede almacenar y proporcionar datos y métodos compartidos. Los componentes se comunican con el servicio para compartir información. Para ello:

  • En el servicio correspondiente define los métodos y propiedades para compartir datos y funcionalidades entre los componentes.
  • Inyecta el servicio en los componentes que necesiten comunicarse y utiliza sus métodos y propiedades.

La comunicación entre componentes es esencial para construir aplicaciones Angular interactivas y bien estructuradas. En este artículo, hemos explorado diferentes métodos de comunicación, incluyendo la comunicación mediante propiedades, eventos y un servicio compartido. Cada enfoque tiene sus casos de uso y beneficios, así que elige el más apropiado según tus necesidades.

Recuerda que practicaremos y experimentaremos con la comunicación entre componentes en nuestro proyecto AngularDex que te servirá para fortalecer tus conocimientos y habilidades para construir aplicaciones flexibles y colaborativas. ¡Sigue aprendiendo y explorando las capacidades de Angular en tu viaje como desarrollador!

Espero que este artículo te haya proporcionado una guía clara y útil sobre la comunicación entre componentes en Angular. ¡Disfruta construyendo aplicaciones increíbles con Angular y potenciando la interacción entre tus componentes!

--

--