Emerson Enrique Vergara Correa
Stiven Castillo Montero
Si, el compilador me dice que tengo que usarlo de esta manera, para usar ngIf hay que importarlo
Trabajar con condicionales en Angular se vuelve mucho más limpio cuando entiendes cuándo usar ngIf y cuándo dar el salto a ngSwitch. Aquí resolvemos el reto de pluralización de un contador de tareas y aprendes a manejar múltiples condiciones sobre un mismo atributo sin llenar tu plantilla de if repetidos.
Cómo resolver la pluralización con ngIf en Angular
El reto consistía en mostrar la palabra item en singular cuando hay una sola tarea y items en plural cuando hay más. La clave está en aislar la palabra dentro de un span y aplicar la directiva estructural ngIf con su bloque else.
La lógica es directa: si el length del arreglo de tareas es igual a 1, muestras item. Si no, Angular renderiza el contenido del ng-template que definiste como elseBlock.
html <span *ngIf="tasks().length === 1; else elseBlock">item</span> <ng-template #elseBlock>items</ng-template>
Al probarlo en el navegador con dos tareas verás items, y al eliminar una el texto cambia automáticamente a item. Reactividad pura sin lógica adicional en el componente.
¿Qué hace ngIf en Angular? Es una directiva estructural que añade o elimina un elemento del DOM según una condición booleana. Con
elsepuedes apuntar a unng-templatealternativo cuando la condición no se cumple.
Cuándo conviene usar ngSwitch en lugar de ngIf
ngIf funciona perfecto para una o dos condiciones, pero cuando empiezas a evaluar el mismo atributo contra varios valores posibles, encadenar ngIf se vuelve ruidoso y difícil de leer. Ahí entra ngSwitch, una directiva pensada para centralizar múltiples casos sobre una sola variable.
La estructura tiene tres piezas: un contenedor con [ngSwitch] que vigila el atributo, varios *ngSwitchCase con los valores específicos, y un *ngSwitchDefault que actúa como fallback cuando ningún caso coincide.
html
<div [ngSwitch]="person.name"> <p *ngSwitchCase="'Nicolás'">Yo soy Nicolás</p> <p *ngSwitchCase="'Julián'">Yo soy Julián</p> <p *ngSwitchCase="'Ana'">Yo soy Ana</p> <p *ngSwitchDefault>Yo no soy nadie</p> </div>Si tuvieras que escribir esto con ngIf, terminarías con cuatro o cinco condicionales repitiendo la misma comparación. Con ngSwitch declaras una sola vez el atributo a evaluar y todo lo demás son ramas limpias.
¿Cuál es la diferencia entre ngIf y ngSwitch?
ngIfevalúa una condición booleana independiente.ngSwitchcompara un mismo valor contra múltiples casos posibles, ideal cuando tienes tres o más ramas sobre el mismo atributo.
Cómo conectar ngSwitch con un input reactivo
Para ver ngSwitch reaccionar en tiempo real, conectas un input que actualice el atributo name de la señal person. Como name es un string, no necesitas conversiones numéricas: solo defines un método changeName que reciba el nuevo valor y actualice la propiedad dentro de la señal.
typescript changeName(event: Event) { const newName = (event.target as HTMLInputElement).value; this.person.update(prev => ({ ...prev, name: newName })); }
Al escribir Nicolás, Julián o Ana en el input verás el mensaje correspondiente. Si escribes Valentina o cualquier otro nombre que no esté contemplado, Angular cae al ngSwitchDefault y muestra Yo no soy nadie.
Qué patrones aprendiste con ngIf, ngSwitch y signals
El ejemplo cubre varios conceptos prácticos que se conectan entre sí. Vale la pena nombrarlos para que los reconozcas en otros contextos.
ngIf, ngSwitch, ngSwitchCase y ngSwitchDefault modifican la estructura del DOM según condiciones del componente.[ngSwitch]="valor" enlaza el atributo del DOM con una expresión del componente.update con el spread del estado previo para mantener inmutabilidad.La regla práctica es simple: si tu condición es binaria, quédate con ngIf. Si estás comparando un mismo valor contra tres o más opciones, cambia a ngSwitch y tu plantilla se lo agradecerá.
¿En qué parte de tu app actual cambiarías un bloque de ngIf encadenados por un ngSwitch? Cuéntame tu caso en los comentarios.
Emerson Enrique Vergara Correa
Stiven Castillo Montero
Si, el compilador me dice que tengo que usarlo de esta manera, para usar ngIf hay que importarlo
Comparto mi aporte de switch usando angular 19
<div> @switch (person().name) { @case ('John') { <p>Yo soy john</p> } @case ('Cesar') { <p>Yo soy cesar</p> } @case ('jose') { <p>Yo soy jose</p> } @default { <p>no soy nadie</p> } } </div> ```\<div> @switch (person().name) { @case ('John') { \<p>Yo soy john\</p> } @case ('Cesar') { \<p>Yo soy cesar\</p> } @case ('jose') { \<p>Yo soy jose\</p> } @default { \<p>no soy nadie\</p> } } \</div>
Manuel Alberto Goicochea Medina
Luis Angel
yo resolví este reto solo agrgeando un span con la letra s y mostrandolo con if que evalué que si el array es mayor que 1
<span class="todo-count"><strong>{{ tasks().length }}</strong> item<span *ngIf="tasks().length > 1">s</span> </span>
Max Andy Diaz Neyra
Brillante!
Luis Ricardo Legreaux Medina
Dario Bublitz
📍ngSwitchCase y caso por defecto
Me llevo que ngSwitch permite definir casos específicos con ngSwitchCase y un caso por defecto (ngSwitchDefault), evitando errores cuando ningún valor coincide.
Seba Cardoso
La regla práctica es simple: si tu condición es binaria, quédate con ngIf. Si estás comparando un mismo valor contra tres o más opciones, cambia a ngSwitch y tu plantilla se lo agradecerá.
Samuel Soto Hoyos
@switch (person().name) { @case ("Nicolás") { <span>Yo soy Nicolás</span> } @default { <span>Yo no soy nadie</span> } }
Kenneth Leonel Cruz Ordoñez
Con un one line if statement, se resuelve
Hearly Sebastian Huertas Perez
Selvin Medina
Cesar Augusto Torrens Acosta
La verdad usé ternaries porqué está feo con el ngIf jajajajajaja
Raúl Adolfo Sánchez Rodríguez
Solución al reto con la nueva nomenclatura de Angular @if :
<footer class="footer"> <!-- This should be `0 items left` by default --> <span class="todo-count"> <strong> {{tasks2().length}} </strong> @if (tasks2().length<2){ item } @else { items } </span>
Dario Bublitz
📍Interactividad con inputs y reactividad
Me llevo que combinar inputs reactivos (como ngModel) con ngIf o ngSwitch permite que el contenido se actualice en tiempo real según la interacción del usuario.
Dario Bublitz
📍Cuándo conviene usar ngSwitch
Me llevo que cuando hay muchas condiciones basadas en un mismo atributo, ngSwitch es más claro y mantenible que encadenar varios ngIf.
Dario Bublitz
📍Uso de ng-template para condiciones alternativas
Me llevo que el uso de ng-template con else permite separar claramente el caso verdadero y falso de un ngIf, haciendo el HTML más ordenado y fácil de leer.
Dario Bublitz
📍Pluralización con ngIf
Me llevo que la pluralización se puede resolver de forma simple usando ngIf, mostrando “item” o “items” según la cantidad de elementos en la lista, reaccionando dinámicamente a los cambios.
Jose Pintado
<span class="todo-count"><strong>{{ tareas().length }}</strong> {{ tareas().length === 1 ? 'item' : 'items' }} left</span>
Raul Ortiz Lavin
Por qué usar esto estaría mal?
this.person().age = parseInt(input.value);