Angular usa @if para expresar visualizaciones condicionales en plantillas.
La plantilla o template @if nos permiten condicionar si se deben agregar o no bloques de código.
La plantilla @for nos permite generar muchos elementos HTML repetidos a partir del recorrido de un arreglo de datos.
Para analizar con un ejemplo estas plantillas procederemos nuevamente a modificar el proyecto001.
En el archivo 'app.component.ts' procedemos a codificar la clase AppComponent con la definición de:
import { Component } from '@angular/core'; import { RouterOutlet } from '@angular/router'; @Component({ selector: 'app-root', imports: [RouterOutlet], templateUrl: './app.component.html', styleUrl: './app.component.css' }) export class AppComponent { nombre = 'Rodriguez Pablo'; edad = 40; articulos = [{ codigo: 1, descripcion: 'naranjas', precio: 540 }, { codigo: 2, descripcion: 'manzanas', precio: 900 }, { codigo: 3, descripcion: 'peras', precio: 490 }]; generarNumero() { return Math.floor(Math.random() * 3) + 1; } }
Hemos definido las propiedades nombre, edad y articulos:
nombre = 'Rodriguez Pablo'; edad = 40; articulos = [{ codigo: 1, descripcion: 'naranjas', precio: 540 },{ codigo: 2, descripcion: 'manzanas', precio: 900 },{ codigo: 3, descripcion: 'peras', precio: 490 }];
Por otro lado un método que retorna un valor aleatorio comprendido entre 1 y 3:
generarNumero() { return Math.floor(Math.random() * 3) + 1; }
Ahora procedemos a modificar el archivo app.component.html:
<div> <h1>Empleado</h1> <p>Nombre del Empleado:{{nombre}}</p> <p>Edad:{{edad}}</p> @if (edad>=18) { <p>Es mayor de edad.</p> } @else { <p>Es menor de edad.</p> } <h1>Listado de articulos</h1> <table> @for(articulo of articulos; track articulo.codigo) { <tr> <td>{{articulo.codigo}}</td> <td>{{articulo.descripcion}}</td> <td>{{articulo.precio}}</td> </tr> } </table> <h1>Numero aleatorio entre 1 y 3</h1> @switch (generarNumero()) { @case (1) { <p>Uno</p> } @case (2) { <p>Dos</p> } @case (3) { <p>Tres</p> } } </div> <router-outlet />
Ejecutemos nuestra aplicación desde la línea de comandos de Node.js:
En el navegador aparece el siguiente contenido:
La instrucción @if verifica la condición, en el caso de verificarse verdadero se inserta el bloque contenido entre las llaves:
@if (edad>=18) { <p>Es mayor de edad.</p> } @else { <p>Es menor de edad.</p> }
Luego si la condición se verifica falsa se ejecuta el bloque definido en el @else. Podemos probar cambiando la edad por un valor menor a 18.
La instrucción @for nos genera posiblemente muchos elementos HTML repetidos, en este ejemplo una serie de filas de una tabla HTML:
@for(articulo of articulos; track articulo.codigo) { <tr> <td>{{articulo.codigo}}</td> <td>{{articulo.descripcion}}</td> <td>{{articulo.precio}}</td> </tr> }
En cada repetición en la variable 'articulo' se almacena un objeto del arreglo 'articulos'. De esta forma podemos mostrar los datos del objeto respectivo.
Es importante agregar la sentencia track al @for indicando un valor único en cada vuelta del @for (es común utilizar un id o clave)
Por último también disponemos la instrucción @switch donde llamamos al método 'generarNumero' y según el valor retornado entrará en el @case respectivo:
@switch (generarNumero()) { @case (1) { <p>Uno</p> } @case (2) { <p>Dos</p> } @case (3) { <p>Tres</p> } }