Carlos Cifuentes
Referencia AngularJS → Angular

$provide.decorator en Angular moderno

$provide.decorator no tiene equivalente directo porque no existe $delegate. Reemplazas el provider de un token por una subclase o un envoltorio.

Antes · AngularJS
app.config(function ($provide) {
  $provide.decorator('UserService', function ($delegate, AuditLog) {
    var originalSave = $delegate.save;
    $delegate.save = function (user) {
      AuditLog.record('user.save', user.id);
      return originalSave.call($delegate, user);
    };
    return $delegate;
  });
});
Después · Angular
@Injectable()
export class AuditedUserService extends UserService {
  private audit = inject(AuditLog);

  override save(user: User) {
    this.audit.record('user.save', user.id);
    return super.save(user);
  }
}

// app.config.ts
providers: [{ provide: UserService, useClass: AuditedUserService }]

Qué cambia

  • { provide: UserService, useClass: AuditedUserService } cambia la implementación para todos los que inyectan UserService.
  • El reemplazo se puede limitar a una ruta o a un componente mediante sus providers, en vez de aplicarse a toda la app.
  • Los decoradores de servicios integrados tienen puntos de extensión dedicados: interceptores para $http, ErrorHandler para $exceptionHandler.

Consejo de migración. Lista todos los decoradores durante el diagnóstico. Cambian el comportamiento lejos del código que afectan, y muchos solo parchean una librería de terceros que no va a existir después de la migración.

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