September 4, 2024
Angular 17: Nueva Sintaxis para Mejorar el Rendimiento y Legibilidad
Angular ha lanzado su versión 17 con una serie de cambios orientados a mejorar tanto el rendimiento como la legibilidad del código. La principal novedad es una nueva sintaxis para controlar el flujo en los templates HTML, simplificando el código y haciéndolo más comprensible para los desarrolladores.
¿En qué consiste la nueva sintaxis?
Los cambios afectan principalmente a los templates HTML. Ahora, la forma de escribir estructuras condicionales y bucles se ha simplificado, eliminando la necesidad de etiquetas adicionales y haciendo el código más legible. Por ejemplo, para mostrar u ocultar elementos según una condición, la nueva sintaxis es mucho más clara y limpia.
Ejemplo con ngIf
Antes:
<p *ngIf="isLoggedIn; else loginBlock">Bienvenido de nuevo</p>
<ng-template #loginBlock><p>Inicia sesión para continuar</p></ng-template>Nueva Sintaxis:
@if (isLoggedIn) {
<p>Bienvenido de nuevo</p>
} @else {
<p>Inicia sesión para continuar</p>
}Esta nueva forma de escribir elimina la necesidad de usar ng-template, lo que simplifica la estructura del código.
Iteraciones con @for
Angular también introduce una nueva forma de iterar listas utilizando @for, con una opción adicional @empty para manejar el caso en el que la lista esté vacía.
Antes:
<div *ngFor="let product of products">
<p>{{ product.name }} - {{ product.price | currency }}</p>
</div>
<ng-container *ngIf="products.length === 0Nueva Sintaxis:
@for (product of products) {
<p>{{ product.name }} - {{ product.price | currency }}</p>
} @empty {
<p>No hay productos disponibles</p>
}Con esta estructura, la iteración se vuelve más intuitiva y se mantiene un control más claro sobre los casos en los que no haya datos que mostrar.
Control de flujo con @switch
La estructura ngSwitch también ha sido simplificada. Ahora se utiliza @switch para hacer la lógica condicional más legible y cercana al control de flujo de JavaScript o C#.
Antes:
<div [ngSwitch]="userRole">
<p *ngSwitchCase="'admin'">Tienes permisos de administrador</p>
<p *ngSwitchCaseNueva Sintaxis:
@switch (userRole) {
@case ('admin') { <p>Tienes permisos de administrador</p> }
@case ('editor') { <p>Tienes permisos de editor</p> }
@default { <p>No tienes permisos especiales</p> }
}Inspiración en otros frameworks
Aunque Angular ha mencionado que se inspiró en Svelte para esta nueva sintaxis, es evidente que también hay un fuerte parecido con cómo ASP.NET Razor y Blazor manejan el flujo de control. Ambos frameworks utilizan estructuras similares para condicionales y bucles, facilitando a los desarrolladores acostumbrados a esos entornos la adopción de Angular.
Comparación con Razor/Blazor
ASP.NET Razor:
Angular 17:
@if (isAdmin) {
<p>Tienes acceso completo</p>
} @else {
<p>Acceso restringido</p>
}Este paralelismo es claro, y sin duda facilita la transición para quienes ya están familiarizados con ASP.NET.
Mejora de rendimiento
Además de la nueva sintaxis, Angular 17 trae mejoras importantes en el rendimiento, incluyendo la posibilidad de realizar lazy loading a nivel de componente mediante la instrucción @defer. Esta permite que los componentes se carguen solo cuando se cumplan ciertas condiciones, optimizando así el rendimiento de las aplicaciones.
@defer (condition) {
<user-profile />
} @loading {
<p>Cargando perfil...</p>
} @error {
<p>No se pudo cargar el perfil</p>
}Esto mejora significativamente la carga asíncrona de componentes, resultando en aplicaciones más rápidas y eficientes.
Compatibilidad con la sintaxis anterior
Una de las grandes ventajas de Angular es su compatibilidad hacia atrás. La nueva sintaxis no reemplaza la anterior, lo que permite seguir utilizando ngIf, ngFor y ngSwitch si así lo prefieres. Incluso es posible combinar ambas sintaxis dentro de un mismo template.
@if (showDetails) {
<section>
<h2>Detalles del Producto</h2>
<div *ngFor="let feature of productFeatures">
<p>{{ feature }}</} @else {
}Esto permite una migración suave hacia la nueva sintaxis sin necesidad de cambios radicales en el código existente.
Migración a la nueva sintaxis
Si deseas aprovechar la nueva sintaxis de Angular 17, puedes realizar la migración de manera manual o utilizar el comando que Angular proporciona para facilitar la transición:
ng g @angular/core:control-flowCon este comando, Angular migrará automáticamente tu código hacia la nueva sintaxis, ahorrándote tiempo y esfuerzo en la actualización.

Written by Pol Valle
I am particularly drawn to developing applications that are not only functional but also visually appealing and easy to use. I accomplish this by implementing SOLID principles and clean architecture, and applying testing to ensure quality.