$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