3. Componente flujo-if

Explicación

Vamos a trabajar con el @if.

El objetivo es que la señal controla el valor y Angular controla la actualización del a interfaz

Ahora mismo tenemos creado

src/app/components/flujo-if/flujo-if.component.ts
src/app/components/flujo-if/flujo-if.component.html
src/app/components/flujo-if/flujo-if.component.css

Código actual del js:

import { Component } from '@angular/core';

@Component({
  selector: 'app-flujo-if',
  standalone: true,
  templateUrl: './flujo-if.component.html',
  styleUrl: './flujo-if.component.css',
})

export class FlujoIfComponent {}

Modificaciones:

En Angular usamos signals para manejar valores que cambian con el tiempo.

Una señal es como una “variable reactiva”: cada vez que cambia, Angular actualiza la vista automáticamente sin que tengamos que hacer nada más.

  • Creamos una señal para guardar el valor, gracias a esto podremos:
    • Asignar un valor por defecto (0)
    • Leer el valor para saber cuál es: edad()
edad = signal<number>(0);
  • Creamos un método que trabaja con esa señal
    • Modificamos el valor con un método de signal: .set(nuevoValor)
actualizarEdad(valor: string) {
  const numero = Number(valor);
  this.edad.set(isNaN(numero) ? 0 : numero);
}

Código final

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

@Component({
  selector: 'app-flujo-if',
  standalone: true,
  templateUrl: './flujo-if.component.html',
  styleUrl: './flujo-if.component.css',
})
export class FlujoIfComponent {

  // Signal que almacena la edad introducida
  edad = signal<number>(0);

  actualizarEdad(valor: string) {
    const numero = Number(valor);
    this.edad.set(isNaN(numero) ? 0 : numero);
  }
}

Ahora en nuestra plantilla 

Resultado final: 

Primero creamos una señal para guardar un dato que queremos controlar, en este caso la edad.

Luego creamos un método que modifica esa señal.

Angular detecta automáticamente cuando la señal cambia, y actualiza el HTML sin necesidad de detectores ni suscripciones.

Por eso, el @if cambia solo cuando la señal cambia.

Código que incorporarmos en la plantilla html

src/app/components/flujo-if/flujo-if.component.html

Vamos a incluir un input, que cuando el usuario escribe en el campo numérico, se dispara el evento (input), llamará al método del componente actualizarEdad() y al pasarle la edad, la actualiza la señal con el valor nuevo

<input type="number" (input)="actualizarEdad($event.target.value)" />

@if (edad() < 18) {
  <p>Menor de edad</p>
} @else {
  <p>Mayor de edad</p>
}