Carlos Cifuentes
Referencia AngularJS → Angular

$exceptionHandler en Angular moderno

Sobrescribir $exceptionHandler pasa a ser una clase que implementa ErrorHandler, registrada como provider.

Antes · AngularJS
app.factory('$exceptionHandler', function ($injector) {
  return function (exception, cause) {
    var tracker = $injector.get('ErrorTracker');
    tracker.report(exception, { cause: cause });
    console.error(exception);
  };
});
Después · Angular
@Injectable()
export class AppErrorHandler implements ErrorHandler {
  private tracker = inject(ErrorTracker);

  handleError(error: unknown) {
    this.tracker.report(error);
    console.error(error);
  }
}

// app.config.ts
providers: [
  { provide: ErrorHandler, useClass: AppErrorHandler },
  provideBrowserGlobalErrorListeners(),
]

Qué cambia

  • handleError recibe solo el error; no hay argumento cause.
  • Recibe los errores lanzados en templates, hooks de ciclo de vida y handlers de eventos. Las fallas HTTP que tu código captura nunca llegan ahí, así que manéjalas en un interceptor.
  • provideBrowserGlobalErrorListeners() (Angular 20 en adelante) también reenvía al ErrorHandler los eventos error y unhandledrejection de window.

Consejo de migración. En una app híbrida los dos handlers están activos, uno por framework. Envía ambos al mismo tracker y etiqueta cada reporte con su origen, así ves bajar los errores legacy a medida que migran las pantallas.

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