Carlos Cifuentes
Referencia AngularJS → Angular

$templateCache / $cacheFactory en Angular moderno

$templateCache ya no hace falta: los templates se compilan dentro del bundle de JavaScript en el build. El almacenamiento en caché de datos con $cacheFactory se muda a los servicios.

Antes · AngularJS
app.run(function ($templateCache) {
  $templateCache.put('user-card.html',
    '<div class="card">{{ vm.user.name }}</div>');
});

app.factory('CountryService', function ($http, $cacheFactory) {
  var cache = $cacheFactory('countries');
  return {
    list: function () { return $http.get('/api/countries', { cache: cache }); }
  };
});
Después · Angular
@Component({
  selector: 'app-user-card',
  templateUrl: './user-card.component.html', // compiled at build time
})
export class UserCardComponent { user = input.required<User>(); }

@Injectable({ providedIn: 'root' })
export class CountryService {
  private http = inject(HttpClient);
  private countries$ = this.http.get<Country[]>('/api/countries')
    .pipe(shareReplay(1));

  list() { return this.countries$; }
}

Qué cambia

  • Los archivos de templateUrl los compila el build; desaparece el paso de html2js o gulp que llenaba $templateCache.
  • $http con la opción cache pasa a ser shareReplay sobre el observable, o un interceptor cuando muchos endpoints necesitan la misma política.
  • $cacheFactory usado como almacén clave-valor pasa a ser un Map dentro de un servicio.

Consejo de migración. Decide cuándo se invalida cada caché antes de portarlo. Muchos cachés de $cacheFactory no tenían invalidación y servían datos viejos hasta recargar la página.

Relacionado

¿Planeas una migración o una plataforma de microfrontends?

En una llamada de 20 minutos me cuentas tu situación y te digo cómo la abordaría. Si todavía no vale la pena, también te lo digo.

Escríbeme por LinkedIn