September 4, 2024
¿Qué es el "tracking" de elementos en Angular?
- Angular
Cuando Angular renderiza listas, por ejemplo usando *ngFor, genera y destruye elementos del DOM dependiendo de cómo cambia la lista de datos. En listas grandes o dinámicas, esto puede volverse ineficiente, ya que Angular no sabe qué elementos son nuevos, cuáles han sido eliminados o cuáles simplemente han cambiado.
Para solucionar este problema, Angular permite usar una clave de seguimiento (tracking key) que ayuda a identificar cada elemento de la lista de manera única. Esta clave puede ser, por ejemplo, un id único que tenga cada elemento en tu lista de datos. Así, cuando la lista cambia, Angular sabe exactamente qué elementos necesita actualizar o eliminar sin tener que volver a renderizar todo.
Sintaxis anterior con trackBy
En la versión anterior de Angular (antes de Angular 17), cuando usabas *ngFor, podías optimizar el proceso de renderizado utilizando una función trackBy que devolviera un identificador único para cada elemento:
<div *ngFor="let event of events; trackBy: trackByEventId">
<p>{{ event.name }}</p>
</div>
<!-- En el archivo de TypeScript -->
trackByEventId(index: number, event: any): number {
return event.id;
}En este ejemplo, trackBy le dice a Angular que identifique cada evento por su id. Si la lista de eventos cambia, Angular solo actualizará los elementos que tengan un id diferente, en lugar de volver a renderizar toda la lista.
Nueva Sintaxis con track
En Angular 17, han simplificado esta funcionalidad con la nueva sintaxis @for.
En lugar de tener que definir una función trackBy por separado, ahora puedes indicar directamente el campo que Angular debería usar para hacer el seguimiento de los elementos. Esto se hace usando la palabra clave track.
Por ejemplo:
@for (event of events; track event.id) {
<p>{{ event.name }}</p>
}Aquí, track event.id indica a Angular que use el campo id de cada evento para identificarlo. Si el valor del id de un evento cambia o se elimina, Angular solo actualizará el evento correspondiente sin necesidad de volver a renderizar toda la lista.
¿Cuándo usar track?
Debes usar track cuando trabajas con listas de elementos que tienen un identificador único (como un id o cualquier campo que sea único para cada elemento en la lista). Esto mejora el rendimiento cuando la lista cambia frecuentemente, ya que Angular solo actualiza los elementos que realmente han cambiado.
Ejemplo Completo
Supongamos que tienes una lista de eventos, cada uno con un id, un name y una date. Usarías @for y track de la siguiente manera:
<ul>
@for (event of events; track event.id) {
<li>
{{ event.name }} - {{ event.date | date }}
</li>
} @empty {
<li>No hay eventos disponibles</li>
}
</ul>En este ejemplo:
@forrecorre la lista deevents.
track event.idasegura que Angular solo actualice o elimine los elementos que cambian suid, optimizando la eficiencia del renderizado.
- Si la lista de
eventsestá vacía, se usa@emptypara mostrar un mensaje.
Resumen
trackayuda a Angular a optimizar el rendimiento al identificar de manera única cada elemento de la lista.
- En la nueva sintaxis, no necesitas una función externa para
trackBy, simplemente puedes especificar el campo único directamente en el@for.
- Mejora la eficiencia del DOM, especialmente cuando trabajas con listas grandes o que cambian frecuentemente.

Escrito por Pol Valle
Me interesa especialmente desarrollar aplicaciones que no solo sean funcionales, sino también atractivas y fáciles de usar. Lo consigo aplicando principios SOLID, arquitectura limpia y testing para garantizar la calidad.