DEV Community

Cover image for El nuevo Control Flow en Angular
Antonio Cardenas for Macao And Friends Blog

Posted on • Updated on

El nuevo Control Flow en Angular

O Control de flujo en Angular.
Ahora en Angular tenemos un nuevo control flow(Control de flujo) esta es una vista preliminar de Angular 17, el cual será lanzado en noviembre, pero podemos ir dando un vistazo al nuevo Control Flow y Vistas Diferidas(Deferrable Views).

El Control Flow de Angular ahora es declarativo y de esta una nueva forma podemos crear condiciones y bucles en las plantillas de Angular. La sintaxis actual de Angular para el control de flujo utiliza las directivas estructurales ngIf, ngFor y ngSwitch.

Aquí una comparación de la forma Antigua vs. la Nueva:

<div *ngIf="usuarioLoggeado; else noAutenticado">
<!-- Datos de usuario Autenticado que queremos mostrar-->
</div>

<ng-template #noAutenticado> 
<!-- Datos de usuario No Autenticado que queremos mostrar-->
</ng-template>
Enter fullscreen mode Exit fullscreen mode

Como podemos ver en este ejemplo, usamos el condicional else para crear él id para asignar al ng-template, pero que pasa si queremos gestionar al usuario logueado de manera individual, bueno se vería así:


<div *ngIf="usuarioLoggeado; then autenticado else noAutenticado"></div>

<ng-template #autenticado> 
<!-- Datos de usuario No Autenticado que queremos mostrar-->
</ng-template>

<ng-template #noAutenticado> 
<!-- Datos de usuario No Autenticado que queremos mostrar-->
</ng-template>

Enter fullscreen mode Exit fullscreen mode

Ahora veremos el mismo ejemplo pero con unas ligeras usando el nuevo Control Flow:

@if (usuarioLoggeado) {

<!-- Si deseamos cargar los datos de manera lazy podemos usar

@defer {
 <!-- Datos de usuario Autenticado que queremos mostrar -->
}

-->

} @else {

<!-- Datos de usuario No Autenticado que queremos mostrar-->

}

Enter fullscreen mode Exit fullscreen mode

Más ejemplos:

for:

<div *ngFor="let pais of paises">
  <option value="{{pais.id}}">{{pais.nombre}}</option>
</div>

Enter fullscreen mode Exit fullscreen mode

lo cual parece no ser un gran cambio pero

@for( pais of paises){
  <option value="{{pais.id}}">{{pais.nombre}}</option>
}

Enter fullscreen mode Exit fullscreen mode

y que pasa sí que queremos añadir una función de buscar por:

@for( pais of paises; track pais.reconocido){

<option value="{{pais.id}}">{{pais.nombre}}</option>

}

Enter fullscreen mode Exit fullscreen mode

podemos ver que es más fácil a comparación de la manera antigua que sería así:

<div *ngFor="let pais of paises; trackBy: trackByFn">

 <option value="{{pais.id}}">{{pais.nombre}}</option>

</div

trackByFn(_: boolean, pais: Pais) {
  return pais.reconocido
}

Enter fullscreen mode Exit fullscreen mode

switch


@switch (lenguajes) {

@case (python) {
    <span> El lenguaje de programación seleccionado es: Python </span>
  }

@case (ruby) {
    <span> El lenguaje de programación seleccionado es: Ruby </span>
  }

@case (java) {
    <span> El lenguaje de programación seleccionado es: Java </span>
  }

@case (Pearl) {
    <span> El lenguaje de programación seleccionado es: Pearl </span>
  }

@default {
<span> No hay unlenguaje de programación seleccionado </span>
}

}

Enter fullscreen mode Exit fullscreen mode

este es un cambio significativo comparado con:


<section [ngSwitch]="lenguajes">

<span *ngSwitchCase="'python'">
 El lenguaje de programación seleccionado es: Python 
</span>

<span *ngSwitchCase="'ruby'">
 El lenguaje de programación seleccionado es: Ruby 
</span>

<span *ngSwitchCase="'java'">
 El lenguaje de programación seleccionado es: Java 
</span>

<span *ngSwitchCase="'pearl'">
 El lenguaje de programación seleccionado es: Pearl 
</span>

<span *ngSwitchDefault>
  No hay unlenguaje de programación seleccionado
</span>

</section>

Enter fullscreen mode Exit fullscreen mode

Como podemos ver, Nuestra plantilla HMTL se redujo considerablemente y ahora es más legible y por ende mantenible.

Deferrable Views

O Vistas Diferidas, este término se refiere a que las vistas pueden ser aplazar o esperar hasta que algo suceda, pero esto prefiero explicarlo más a detalle en este artículo

@for( pais de paises){
  @defer(on timer(100ms)){
  <!-- Esto hara una espera que se carque el componente se usa cuando tenemos componente grandes-->
  } 
}

Enter fullscreen mode Exit fullscreen mode

también podemos customizar las acciones como ser:

@defer (on interaction( la interacion )) { <!-- como ser click , hover ,etc -->
        <h1> Hola me llamaron de una interacción </h1>
}
Enter fullscreen mode Exit fullscreen mode

Pero de donde salió todo esto bueno, de propuestas para Control Flow y Deferrable Views de la cual en un principio se tenía pensado usar etiquetas como las de HTML del estilo {#if}, {:else} y también {/if} lo cual podría llegar a ser confuso, pero al final a raíz de una votación se llegó al consenso de usar @-sintaxis.


No cabe duda que con este Nuevo Control Flow en Angular podremos hacer proyecto más intuitivos y aprovechar, además de crear código más ordenado y legible, aunque todavía existen algunos retos y cosas que afinar, estoy seguro de que en noviembre con el lanzamiento de Angular 17 tendremos más información y ejemplos.

Top comments (0)