Logo

dev-resources.site

for different kinds of informations.

El nuevo Control Flow en Angular

Published at
10/9/2023
Categories
angular
angular17
update
programming
Author
antoniocardenas
Author
15 person written this
antoniocardenas
open
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.

Featured ones: