Cómo usar ngIf en Angular 4.0

Clase 15 de 80Curso de Angular 4

Resumen

Controla con seguridad qué se muestra en tu interfaz usando la directiva estructural ngIf en Angular 4.0. Aprende a ocultar elementos inactivos con un booleano, corrige atributos mal escritos y evita el error de combinar dos directivas en el mismo elemento HTML con ng-container.

¿Qué es ngIf y cómo oculta elementos según estado?

La directiva ngIf decide si un elemento se renderiza o no en función de una expresión booleana. Partimos de un arreglo en TypeScript con negocios que ahora incluyen un atributo activo. Si un negocio no está activo, no se muestra en la lista. Por ejemplo, Sushi Sushi Roll se desactiva y deja de verse.

  • Usa un atributo booleano: activo: true/false.
  • Muestra solo cuando lugar.activo sea verdadero.
  • Oculta automáticamente los inactivos.

¿Cómo se ve el arreglo en TypeScript?

// Cada objeto incluía solo nombre; agregamos "activo".
const negocios = [
  { nombre: 'Sushi Sushi Roll', activo: false },
  { nombre: 'Zapatería', activo: true },
  // ...otros negocios
];

¿Cómo se usa ngIf en la plantilla?

<!-- Mostrar solo si está activo -->
<li *ngIf="lugar.activo">{{ lugar.nombre }}</li>

Nota: si el IDE no reconoce el atributo, valida que el nombre coincida. Se corrigió de "active" a activo para que la expresión funcione.

¿Cómo evitar el error con dos directivas estructurales?

Angular indica que no se pueden aplicar dos directivas estructurales en el mismo elemento HTML. Si usas ngFor y ngIf juntos en el mismo

  • , verás ese error. La solución oficial es envolver el elemento con ng-container y mover allí el ngFor.

    <ng-container *ngFor="let lugar of negocios">
      <li *ngIf="lugar.activo">{{ lugar.nombre }}</li>
    </ng-container>
    
    • Un solo elemento con una directiva estructural.
    • ng-container no agrega nodos extra al DOM.
    • Se renderizan cinco de seis elementos tras filtrar el inactivo.
    • Si pones la zapatería en false, también desaparece.

    ¿Qué sintaxis y detalles debes cuidar?

    Las directivas estructurales en Angular usan asterisco y están en camelCase. Solo necesitas una expresión que evalúe a verdadero o falso para controlar la visibilidad.

    • Empieza con asterisco (*): por ejemplo, *ngIf.
    • Usa camelCase: ngIf, ngFor.
    • Proporciona una expresión booleana: lugar.activo.
    • Verifica nombres de atributos: "active" vs activo.
    • Evita dos directivas estructurales en el mismo elemento: usa ng-container.

    ¿Has aplicado otros patrones con ngIf para mejorar la UI? Comparte tus ideas y dudas en los comentarios.