Contenido del curso
Gestión de Entornos
Nuevas Funcionalidades en Angular
- 7

Variables locales con @let en Angular
Viendo ahora - 8

Lazy loading de imágenes con ngSrc en Angular
17:08 min - 9

URLs amigables para SEO en Angular
11:27 min - 10

"Reactividad en Angular: Migración a Input Signals"
20:42 min - 11

Migración automática de @Input a signals en Angular
12:23 min - 12

Migración de Outputs en Angular: De Decoradores a Funciones
07:35 min - 13

linkedSignal en Angular: computed con set
12:56 min - 14

Sincronización de Componentes en Angular con Model y Signals
12:03 min - 15

toSignal: Observables de RxJS como Signals
11:17 min - 16

Conversión de Observables a Signals en Angular con toSignal
08:07 min - 17

Interoperabilidad de RXDS y Signals en Angular: Uso de RX Resourcers
11:10 min - 18

Manejo de Parámetros Reactivos con RX Resource en Angular
09:18 min - 19

Manejo de Promesas y Fetch en Angular sin RXJS
07:59 min - 20

Reactividad en Angular: Uso de Signals para Consultas DOM
09:00 min - 21

Configuración de Prettier para HTML en Angular
05:28 min
Server-Side Rendering (SSR) y Navegación
- 22

Migración al Application Builder de Angular
10:17 min - 23

Server Side Rendering con Angular: Mejora Rendimiento y SEO
13:26 min - 24

afterNextRender: código seguro solo en el browser
09:42 min - 25

Geolocalización y APIs: Creando un Mapa de Tiendas Cercanas
15:39 min - 26

Pre-rendering en Angular con ng build
11:25 min - 27

Desplegando Angular SSR en Firebase
18:12 min
Optimización de Rendimiento
- 28

Generación de Meta Tags Dinámicos con Angular y Open Graph
15:11 min - 29

Creación de MetaTags Dinámicos en Angular
12:51 min - 30

Proceso de Hydration y Event Replay en Angular
05:54 min - 31

Productos relacionados con RxResource en Angular
09:25 min - 32

Carga diferida de componentes en Angular para mejorar rendimiento
10:10 min - 33

Optimización de Incremental Hydration en Angular
06:14 min - 34

Configuración de Server Routing en Angular
10:43 min - 35

Aplicaciones Sin Zone.js: Migración a Signals en Angular
13:02 min - 36

Cierre del curso avanzado de Angular
00:53 min
Variables locales con @let en Angular
Resumen
Angular incorporó las variables locales con @let en los templates, una característica que mejora la legibilidad del código y evita ejecuciones repetidas de signals. Si trabajas con Angular y quieres optimizar tus componentes sin caer en malas prácticas, aquí te muestro cómo aprovechar esta sintaxis y qué errores debes evitar.
¿Qué es @let en Angular y cómo se declara en un template?
La directiva @let te permite declarar variables directamente dentro del template HTML sin tener que pasar por el componente TypeScript. La sintaxis es simple: escribes @let seguido del nombre de la variable y le asignas un valor o expresión [02:15].
Por ejemplo, en un archivo product-details.html podrías escribir algo como @let myVar = 'hola' y luego renderizarlo dentro de un <h1>. Funciona, pero no significa que debas usarlo así.
¿Para qué sirve @let en Angular? Sirve para crear variables locales dentro de un template, evitando llamadas repetidas a signals u otras expresiones costosas. Es ideal cuando reutilizas el mismo valor varias veces en el HTML.
¿Cuándo conviene usar @let con signals?
El mejor caso de uso aparece cuando trabajas con signals que se ejecutan múltiples veces en el mismo template. Recuerda que un signal necesita ejecutarse para entregar su valor, así que escribir product() cinco veces significa cinco ejecuciones [03:40].
La solución elegante es guardar el resultado en una variable local:
- Declaras
@let data = product()una sola vez. - Reemplazas todas las apariciones de
product()pordata. - Reduces ejecuciones y mejoras la lectura del código.
Además, cuando tu signal puede devolver null (por ejemplo, mientras un fetch asíncrono a la API aún no responde), puedes envolver el bloque en un @if (data) { ... } y eliminar el operador ? de encadenamiento opcional. Dentro del if, TypeScript ya sabe que data existe, así que el código queda más limpio.
¿Por qué un signal puede venir nulo al inicio?
Porque la conexión a la API no es instantánea, es asíncrona. El valor inicial del signal es null y solo cambia cuando el endpoint responde [04:55]. Por eso, antes de @let, era común ver operadores ? por todo el template para evitar errores. Con @let más @if, ese ruido visual desaparece.
¿Qué malas prácticas debes evitar al usar @let?
Aquí entra el famoso un gran poder conlleva una gran responsabilidad. La sintaxis @let abre la puerta a cosas que no deberías hacer en el template.
La primera regla es no asignar valores arbitrarios que deberían vivir en el componente. Si una variable no deriva de un estado existente en el TypeScript, probablemente no tiene por qué nacer en el HTML.
La segunda regla es evitar lógica de negocio dentro del template. Por ejemplo, calcular un cover así:
html @let cover = data.images?.length ? data.images[0] : '';
Es técnicamente válido, pero mezcla responsabilidades. Cuando alguien quiera entender tu código, va a tener que leer dos archivos: el .ts y el .html, buscando lógica en ambos lados.
¿Dónde debe vivir la lógica de negocio en Angular? Siempre en el componente TypeScript, idealmente con
computedsignals olinkedsignals. El template solo debe renderizar valores ya precalculados.
¿Cómo mantener templates limpios y mantenibles?
Sigue estos principios cuando uses @let:
- Úsalo para cachear el valor de un signal que se repite varias veces.
- Combínalo con
@ifpara eliminar verificaciones de nulidad innecesarias. - No declares variables sueltas sin relación con el estado del componente.
- No metas cálculos complejos ni condicionales largos dentro del @let.
- Mueve la lógica derivada a
computed()en el componente.
Después de aplicar estas reglas, vas a notar que el template se lee como una descripción visual del UI, no como un segundo controlador escondido en HTML.
¿Cómo aplicar @let junto con Prettier y ESLint?
Mientras refactorizas, Prettier puede marcarte advertencias como saltos de línea sobrantes o problemas entre corchetes. La buena noticia es que ya integraste Prettier con ESLint en clases anteriores, así que basta con correr el formateador o el linter para que ambos arreglen los detalles automáticamente [08:20].
Un flujo típico sería:
- Refactorizas tu template introduciendo
@let. - Ejecutas el formateador (
npm run formato el comando que tengas configurado). - ESLint aplica las reglas de Prettier y deja el archivo listo para commit.
Reto: aplica @let en header.component
Para practicar, abre el archivo header.component y revisa cómo se está usando el signal cart, que representa el carrito de compras [10:05]. Vas a encontrar varias llamadas a cart(): una para obtener length y otra para recorrer los productos.
Tu reto es reemplazar esas suscripciones múltiples por una sola variable @let, reutilizándola en todo el template. Es el mismo patrón que aplicamos en product-details, así que te servirá para fijar el concepto.
¿Cómo te quedó tu refactor del header? Comparte tu solución en los comentarios y cuéntanos qué otras mejoras encontraste al usar @let en tus propios proyectos.