Cargando...

Referencia de Decoradores

La referencia de decoradores en Angular es una guía esencial para el desarrollo de aplicaciones modernas y SPA, ya que los decoradores permiten añadir metadatos a clases, métodos y propiedades, definiendo su comportamiento dentro del framework. Estos metadatos facilitan la creación de componentes reutilizables, la gestión del estado, la organización del flujo de datos y el control del ciclo de vida de los elementos de la interfaz.
Los decoradores más utilizados son @Component, @Directive, @Pipe, @Injectable y @NgModule. @Component define un componente de interfaz de usuario, @Directive permite crear directivas personalizadas que manipulan el DOM, @Pipe transforma datos en las plantillas, @Injectable habilita la inyección de dependencias y @NgModule estructura la aplicación en módulos funcionales. Decoradores adicionales como @Input y @Output facilitan la comunicación entre componentes, mientras que @ViewChild y @ContentChild permiten acceder a elementos hijos o contenido proyectado en plantillas.
Con esta referencia, el lector aprenderá a utilizar los decoradores correctamente, creando componentes escalables y optimizados, evitando errores comunes como prop drilling, re-renderizados innecesarios y mutaciones de estado. Esto permitirá desarrollar aplicaciones Angular seguras, eficientes y mantenibles, aplicando las mejores prácticas en proyectos reales y garantizando un flujo de datos claro y controlado.

Ejemplo Básico

typescript
TYPESCRIPT Code
import { Component, Input } from '@angular/core';

@Component({
selector: 'app-user-card',
template: `     <div class="card">       <h2>{{ name }}</h2>       <p>Edad: {{ age }}</p>     </div>
`,
styles: [`     .card {
padding: 16px;
border-radius: 8px;
background-color: #f5f5f5;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
text-align: center;
}
`]
})
export class UserCardComponent {
@Input() name!: string;
@Input() age!: number;
}

En este ejemplo, el decorador @Component convierte la clase UserCardComponent en un componente funcional de Angular. El parámetro selector define el tag HTML para usar el componente, mientras que template y styles configuran su presentación visual. Los decoradores @Input permiten recibir datos del componente padre, evitando la necesidad de prop drilling.
Angular gestiona automáticamente el ciclo de vida del componente, incluyendo la inicialización, renderizado y destrucción. Los cambios en propiedades decoradas con @Input se reflejan automáticamente en la interfaz, minimizando re-renderizados innecesarios. Este ejemplo demuestra cómo los decoradores controlan el flujo de datos y el estado del componente, aplicable en proyectos reales de Angular para crear interfaces consistentes y reutilizables.

Ejemplo Práctico

typescript
TYPESCRIPT Code
import { Component, Input, Output, EventEmitter } from '@angular/core';

@Component({
selector: 'app-counter',
template: `     <div class="counter">       <h3>Contador: {{ count }}</h3>       <button (click)="increment()">+</button>       <button (click)="decrement()">-</button>     </div>
`,
styles: [`     .counter {
display: flex;
gap: 10px;
justify-content: center;
align-items: center;
}
`]
})
export class CounterComponent {
@Input() count: number = 0;
@Output() countChange = new EventEmitter<number>();

increment() {
this.count++;
this.countChange.emit(this.count);
}

decrement() {
this.count--;
this.countChange.emit(this.count);
}
}

Advanced Angular Implementation

typescript
TYPESCRIPT Code
import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';

@Component({
selector: 'app-smart-counter',
template: `     <div class="smart-counter">       <h3>Contador Inteligente: {{ value }}</h3>       <button (click)="increase()">+</button>       <button (click)="decrease()">-</button>     </div>
`,
styles: [`     .smart-counter {
background-color: #e0f7fa;
padding: 16px;
border-radius: 12px;
text-align: center;
}
`]
})
export class SmartCounterComponent implements OnInit, OnChanges {
@Input() value: number = 0;
@Output() valueChange = new EventEmitter<number>();

ngOnInit() {
console.log('SmartCounter inicializado con valor:', this.value);
}

ngOnChanges(changes: SimpleChanges) {
if (changes['value']) {
console.log('Valor cambiado:', changes['value'].currentValue);
}
}

increase() {
this.value++;
this.valueChange.emit(this.value);
}

decrease() {
this.value--;
this.valueChange.emit(this.value);
}
}

SmartCounterComponent combina @Input, @Output y los lifecycle hooks OnInit y OnChanges para gestionar el estado y actualizar la interfaz de manera reactiva. Los decoradores permiten la reutilización del componente y evitan prop drilling y re-renderizados innecesarios. Este enfoque optimiza el flujo de datos y la gestión del estado, fundamental para aplicaciones Angular escalables y mantenibles.

Las mejores prácticas incluyen usar @Input únicamente para datos necesarios y @Output para eventos. Evite mutaciones directas del estado y exceso de prop drilling. Para optimizar el rendimiento, utilice ChangeDetectionStrategy.OnPush. Angular DevTools permite monitorear ciclos de vida y EventEmitter. Un uso correcto de los decoradores asegura aplicaciones Angular seguras, rápidas y escalables.

📊 Referencia Completa

Angular Element/Method Description Syntax Example Notes
@Component Define un componente @Component({...}) @Component({ selector:'app-demo', template:'...' }) Decorador principal
@Directive Crea una directiva @Directive({...}) @Directive({ selector:'[highlight]' }) Manipula el DOM
@Pipe Transforma datos @Pipe({...}) @Pipe({name:'capitalize'}) Cambio de presentación
@NgModule Define un módulo @NgModule({...}) @NgModule({ declarations:[], imports:[] }) Organiza la app
@Injectable Permite DI @Injectable({...}) @Injectable({ providedIn:'root' }) Para inyección de dependencias
@Input Datos entrantes @Input() prop:type @Input() title:string Recibe datos del padre
@Output Eventos de componente @Output() event=new EventEmitter() @Output() clicked=new EventEmitter() Envía datos al padre
@HostListener Escucha eventos DOM @HostListener('click') handler(){} @HostListener('window:scroll') onScroll() Bind de eventos
@ViewChild Acceso a hijo @ViewChild(ChildComponent) child!:ChildComponent Manipulación de hijo
@ContentChild Acceso a contenido @ContentChild(TemplateRef) tpl!:TemplateRef Gestión de contenido proyectado
@HostBinding Bind de propiedades @HostBinding('class.active') isActive=true Modificación dinámica DOM

📊 Complete Angular Properties Reference

Property Values Default Description Angular Support
selector string none Selector del componente todas
template string none Plantilla del componente 2+
styles array string[] none Estilos del componente
providers array [] Proveedores DI 2+
inputs array [] Lista @Input 4+
outputs array [] Lista @Output 4+
animations array [] Animaciones 4+
changeDetection string 'Default' Estrategia de Change Detection 5+
encapsulation string 'Emulated' Encapsulación CSS 2+
standalone boolean false Componente independiente 14+
imports array [] Importación de módulos 14+
schemas array [] Elementos personalizados permitidos 9+

Dominar la referencia de decoradores permite crear componentes optimizados, reutilizables y escalables. Comprender el flujo de datos, la gestión del estado y los hooks del ciclo de vida asegura aplicaciones Angular eficientes. Se recomienda profundizar en Dependency Injection, lifecycle hooks avanzados, Change Detection y RxJS para manejar datos asíncronos y mejorar habilidades profesionales en Angular.

🧠 Pon a Prueba tu Conocimiento

Listo para Empezar

Pon a Prueba tu Conocimiento

Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema

3
Preguntas
🎯
70%
Para Aprobar
♾️
Tiempo
🔄
Intentos

📝 Instrucciones

  • Lee cada pregunta cuidadosamente
  • Selecciona la mejor respuesta para cada pregunta
  • Puedes repetir el quiz tantas veces como quieras
  • Tu progreso se mostrará en la parte superior