Angular
Tutorial Angular: Comunicación entre componentes Angular
Angular: comunicación entre componentes con @Input y @Output. Aprende a intercambiar datos entre componentes en Angular utilizando las propiedades @Input y @Output para una interacción eficiente.
Aprende Angular GRATIS y certifícateLa comunicación entre componentes es esencial en las aplicaciones Angular para mantener la coherencia y la actualización de datos entre diferentes partes de la aplicación.
En Angular, existen varias técnicas para lograr esta comunicación entre componentes, y se pueden dividir en dos categorías principales: comunicación entre componentes relacionados y comunicación entre componentes no relacionados.
Comunicación entre componentes relacionados
Comunicación mediante propiedades (@Input()
)
Los componentes pueden intercambiar información pasando datos a través de propiedades, también conocido como "binding" en Angular.
Un componente puede enviar datos a otro componente utilizando la propiedad de entrada @Input()
.
Por ejemplo, supongamos que hay un componente UsuarioComponent
que muestra detalles de un usuario:
// En UsuarioComponent
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-usuario',
standalone: true,
template: `
@if (usuario) {
<div>
<h2>{{ usuario.nombre }}</h2>
<p>{{ usuario.descripcion }}</p>
</div>
}
`
})
export class UsuarioComponent {
@Input() usuario?: Usuario;
}
Para usar este componente en otro componente, simplemente se enlaza la propiedad usuario
:
@Component({
selector: 'app-contenedor',
standalone: true,
imports: [UsuarioComponent],
template: `
<app-usuario [usuario]="usuarioActual" />
`
})
export class ContenedorComponent {
usuarioActual: Usuario = { nombre: 'Ana', descripcion: 'Desarrolladora' };
}
Comunicación mediante eventos (@Output())
Los componentes pueden comunicarse enviando eventos utilizando propiedades de salida.
Un componente emisor puede lanzar un evento utilizando la propiedad de salida @Output()
, generalmente utilizando la clase EventEmitter
, que puede ser escuchada por otro componente.
Por ejemplo, consideremos un componente ContadorComponent
que permite al usuario aumentar un contador y notificar a otros componentes cuando cambia:
import { Component, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-contador',
standalone: true,
template: `
<button (click)="aumentarContador()">Aumentar</button>
`
})
export class ContadorComponent {
contador = 0;
@Output() cambioContador = new EventEmitter<number>();
aumentarContador() {
this.contador++;
this.cambioContador.emit(this.contador);
}
}
En el componente que utiliza ContadorComponent
:
@Component({
selector: 'app-contenedor',
standalone: true,
imports: [ContadorComponent],
template: `
<app-contador (cambioContador)="actualizarContador($event)" />
<p>Contador actual: {{ contadorActual }}</p>
`
})
export class ContenedorComponent {
contadorActual = 0;
actualizarContador(nuevoValor: number) {
this.contadorActual = nuevoValor;
}
}
Proyección de contenido
La proyección de contenido utiliza la etiqueta <ng-content>
para insertar contenido dinámico en un componente desde su componente padre.
@Component({
selector: 'app-mi-componente',
standalone: true,
template: `
<div class="contenedor">
<ng-content select="[header]"></ng-content>
<ng-content select="[content]"></ng-content>
</div>
`
})
export class MiComponenteComponent {}
Uso en el componente padre:
@Component({
selector: 'app-contenedor',
standalone: true,
imports: [MiComponenteComponent],
template: `
<app-mi-componente>
<h3 header>Título personalizado</h3>
<p content>Contenido personalizado</p>
</app-mi-componente>
`
})
export class ContenedorComponent {}
Comunicación entre componentes no relacionados
Servicios compartidos
Los servicios son instancias compartidas que permiten la comunicación entre componentes que no están directamente relacionados.
La inyección de dependencias es el mecanismo mediante el cual se proporcionan estas instancias a los componentes que las necesitan.
Un servicio puede tener métodos para almacenar y recuperar datos, lo que facilita el intercambio de información entre componentes.
Por ejemplo, un UsuarioService
podría proporcionar información de usuario a diferentes partes de la aplicación:
// En UsuarioService
import { Injectable, signal, computed } from '@angular/core';
import { Usuario } from './usuario.model';
@Injectable({
providedIn: 'root'
})
export class UsuarioService {
usuarioActual: Usuario; // Suponiendo que Usuario es una interfaz o clase
constructor() {
this.usuarioActual = {
id: 1,
nombre: 'Usuario Ejemplo',
correo: 'usuario@example.com'
};
}
actualizarUsuario(usuarioNuevo: Usuario) {
this.usuarioActual = usuarioNuevo;
}
obtenerUsuario(): Usuario {
return this.usuarioActual;
}
}
Mediante la inyección de dependencias, un componente puede acceder al servicio en su constructor:
// En cualquier componente
import { Component } from '@angular/core';
import { UsuarioService } from './usuario.service'; // Importar el servicio
@Component({
selector: 'app-mi-componente',
templateUrl: './mi-componente.component.html',
styleUrls: ['./mi-componente.component.css']
})
export class MiComponenteComponent {
usuario: Usuario; // Suponiendo que Usuario es una interfaz o clase
constructor(private usuarioService: UsuarioService) {
// El servicio UsuarioService se inyecta en el constructor
this.usuario = this.usuarioService.usuarioActual;
}
}
Ejercicios de esta lección Comunicación entre componentes Angular
Evalúa tus conocimientos de esta lección Comunicación entre componentes Angular con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Signals en Angular
Guards funcionales
Decodificar JWT en Angular
Servicio con HttpClient
Ciclo de vida de componentes en Angular
Gestión de productos de Fake Store API
Data binding en Angular
Routes sin módulos en Angular
Router en Angular
Instalación de Angular
Route Guards basados en interfaces
La directiva @if en Angular
Formularios reactivos en Angular
Servicios en Angular
Interceptor funcional
Servicio con Array
La directiva @for en Angular
Interceptores HTTP
Componentes standalone true
Formularios con ngModel en Angular
Routes en Angular
Comunicación entre componentes Angular
Parámetros en rutas con ActivatedRoute
CRUD de Restaurantes y Platos
Tablas en Angular Material
Formulario de registro de usuarios
Instalación y uso de NgBoostrap
Desarrollo de componentes Angular
JWT en Angular
Formularios reactivos en Angular
Formularios en Angular Material
Layout con Angular Material
Effects en Angular
Data binding
HttpClient en servicios de Angular
Desarrollo de módulos Angular
Comandos Angular CLI
Subir archivo en formularios
La directiva routerLink en Angular
Todas las lecciones de Angular
Accede a todas las lecciones de Angular y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Instalación Angular
Introducción Y Entorno
Comandos Angular Cli
Introducción Y Entorno
Desarrollo De Componentes Angular
Componentes
Data Binding En Angular
Componentes
Ciclo De Vida De Componentes En Angular
Componentes
Comunicación Entre Componentes Angular
Componentes
La Directiva @If En Angular
Componentes
La Directiva @For En Angular
Componentes
Componentes Standalone
Componentes
Desarrollo De Módulos Angular
Módulos
Routes En Angular
Enrutado Y Navegación
Router En Angular
Enrutado Y Navegación
La Directiva Routerlink En Angular
Enrutado Y Navegación
Parámetros En Rutas Con Activatedroute
Enrutado Y Navegación
Routes Sin Módulos En Angular
Enrutado Y Navegación
Servicios En Angular
Servicios E Inyección De Dependencias
Httpclient En Servicios De Angular
Servicios E Inyección De Dependencias
Formularios Con Ngmodel En Angular
Formularios
Formularios Reactivos En Angular
Formularios
Subir Archivo En Formularios
Formularios
Layout Con Angular Material
Integración Con Angular Material
Tablas En Angular Material
Integración Con Angular Material
Formularios En Angular Material
Integración Con Angular Material
Instalación Y Uso De Ngboostrap
Integración Con Bootstrap Css
Signals En Angular
Signals Y Reactividad
Effects En Angular
Signals Y Reactividad
Route Guards Basados En Interfaces
Autenticación Y Autorización
Guards Funcionales
Autenticación Y Autorización
Interceptores Http Basados En Interfaz
Autenticación Y Autorización
Interceptores Http Funcionales
Autenticación Y Autorización
Seguridad Jwt En Angular
Autenticación Y Autorización
Decodificar Tokens Jwt En Angular
Autenticación Y Autorización
Certificados de superación de Angular
Supera todos los ejercicios de programación del curso de Angular y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender la importancia de la comunicación entre componentes en Angular.
- Distinguir entre comunicación entre componentes relacionados y no relacionados.
- Dominar el uso de propiedades y eventos para comunicación entre componentes.
- Aprender a utilizar servicios compartidos para comunicación entre componentes.