Directiva ngSwitch

Clase 18 de 80Curso de Angular 4

Resumen

Aprende a mostrar estados de cercanía de forma clara con Angular. Aquí verás cómo combinar ngSwitch (directiva de atributo) con ngSwitchCase (directiva estructural) y ngStyle para renderizar un único label por elemento y colorearlo según el nivel. Todo parte de un modelo con datos calculados en el servidor, eficiente para múltiples clientes.

¿Qué resuelve ngSwitch en una lista con cercanía?

La vista debe indicar si un lugar está muy cercano, cercano o lejano. Para ello, cada elemento tiene dos atributos definidos en el servidor: cercanía (niveles 1, 2, 3; 1 es más cercano, 3 más lejano) y distancia en kilómetros. El cálculo en el servidor es clave: se procesa una vez y queda disponible para un cliente de Angular, uno móvil o de escritorio. Así se mantiene consistencia y rendimiento.

  • Un único estado visible por lugar: muy cercano, cercano o lejano.
  • Niveles de cercanía: 1, 2 y 3; 1 es el más cercano.
  • Distancia en km como dato auxiliar: 1, 1.8, 5, 10, 35, 120.
  • Beneficio del servidor: cálculo centralizado para todos los clientes.
  • Habilidades: elegir directiva correcta, modelar atributos, y comunicar estados con claridad.

¿Cómo luce el modelo de datos?

  • Atributos por lugar: cercania (1–3). distancia (km).
  • El servidor entrega estos campos ya calculados.
  • La interfaz solo consume y muestra.

¿Cómo implementar ngSwitch y ngSwitchCase en Angular?

La directiva [ngSwitch] evalúa un valor y muestra solo el caso que coincide. Según se explica, no evalúa expresiones: debe haber un matching exacto o caer en un caso por defecto (default).

  • [ngSwitch]: directiva de atributo que decide el valor a evaluar.
  • ngSwitchCase: directiva estructural que agrega o remueve del DOM*.
  • Estrategia: evaluar lugar.cercania y mostrar un único label.
<!-- lista de lugares -->
<div *ngFor="let lugar of lugares">
  <div [ngSwitch]="lugar.cercania">
    <span *ngSwitchCase="1">Muy cercano</span>
    <span *ngSwitchCase="2">Cercano</span>
    <span *ngSwitchCase="3">Lejano</span>
    <!-- Si no hay coincidencia exacta, se usaría un caso por defecto. -->
  </div>
</div>

Buenas prácticas. - Mantén el valor de [ngSwitch] simple: lugar.cercania. - Usa casos explícitos 1, 2 y 3. - Recuerda que solo se muestra un caso a la vez.

¿Cómo combinar ngSwitch con ngStyle para dar feedback visual?

Para reforzar la lectura visual, se colorean los labels: verde para “Muy cercano”, negro para “Cercano” y rojo para “Lejano”. Importante en ngStyle: la evaluación debe ser un objeto entre llaves, de lo contrario verás un error en el navegador tras un refresh.

<div *ngFor="let lugar of lugares">
  <div [ngSwitch]="lugar.cercania">
    <span *ngSwitchCase="1" [ngStyle]="{ color: 'green' }">Muy cercano</span>
    <span *ngSwitchCase="2" [ngStyle]="{ color: 'black' }">Cercano</span>
    <span *ngSwitchCase="3" [ngStyle]="{ color: 'red' }">Lejano</span>
  </div>
</div>

Claves de implementación. - ngStyle es de atributo: espera un objeto con pares propiedad-valor. - color como propiedad CSS: 'green', 'black', 'red'. - Si olvidas las llaves en ngStyle, se produce un error.

¿Te gustaría ver un caso adicional por defecto o variar estilos según distancia? Cuéntalo en los comentarios y qué otros indicadores visuales usarías.