🔄OnChanges

OnChanges es un hook del ciclo de vida de un componente o directiva en Angular que se invoca cuando Angular reinicializa los datos-bound input properties.

Es ideal para implementar lógicas o acciones cuando los valores de las propiedades de entrada (@Input()) cambian.

Cómo Implementarlo

Importar OnChanges: Primero, necesitas importar OnChanges junto con SimpleChanges desde @angular/core.

import { Component, OnChanges, SimpleChanges } from '@angular/core';

Implementar OnChanges: Tu componente o directiva debe implementar la interfaz OnChanges.

@Component({
  selector: 'app-mi-componente',
  templateUrl: './mi-componente.component.html',
  styleUrls: ['./mi-componente.component.css']
})
export class MiComponenteComponent implements OnChanges {
  @Input() miPropiedad: any;

  ngOnChanges(changes: SimpleChanges): void {
    // Lógica aquí
  }
}

Entendiendo SimpleChanges

  • ¿Qué es SimpleChanges? Es un objeto que tiene un registro de cambios para cada @Input() propiedad. Para cada propiedad, puedes obtener el valor actual y el valor anterior.

  • Estructura de SimpleChanges: Cada clave en el objeto SimpleChanges corresponde al nombre de una propiedad @Input(), y el valor asociado es un objeto con las siguientes propiedades:

    • currentValue: el valor actual de la propiedad.

    • previousValue: el valor anterior de la propiedad antes del cambio.

    • firstChange: un booleano que indica si este es el primer cambio del valor de la propiedad desde que se instanció el componente.

Ejemplo Práctico

@Component({
  selector: 'app-mi-componente',
  template: `<p>Hola, {{nombre}}</p>`
})
export class MiComponenteComponent implements OnChanges {
  @Input() nombre: string;

  ngOnChanges(changes: SimpleChanges): void {
    if (changes['nombre']) {
      console.log('Nombre nuevo:', changes['nombre'].currentValue);
      // Aquí puedes agregar más lógica que necesites ejecutar cuando `nombre` cambie.
    }
  }
}

Precaución con firstChange: Al iniciar el componente, ngOnChanges se dispara una vez por cada @Input() propiedad, incluso antes de ngOnInit. Usa firstChange para distinguir entre la inicialización y cambios subsiguientes.

Última actualización