ibejo
ibejo

Reputation: 67

Angular2 ExceptionHandler not working

I've searched around quite a bit and haven't found anything that is helping me get over the hump. I think that I have implemented the Angular2 ExceptionHandler as required, but it is never getting called.

Main.ts:

import { bootstrap } from '@angular/platform-browser-dynamic';
import { disableDeprecatedForms, provideForms } from '@angular/forms';
import { AppComponent } from './app.component';
import { ExceptionHandler, Injector , provide, Provider} from '@angular/core';
import { APP_ROUTER_PROVIDERS } from './app.routes';    // <-- load in global routes and bootstrap them
import { ErrorHandler } from './errorhandler/error-handler.component';

bootstrap(AppComponent,[ 
    APP_ROUTER_PROVIDERS,
    disableDeprecatedForms(),
    provideForms(),
    provide(ExceptionHandler, {useClass: ErrorHandler})
])

error-handler.component.ts:

import { Component, Injectable, ExceptionHandler } from '@angular/core';
import { ROUTER_DIRECTIVES } from '@angular/router';
import { APP_PROVIDERS } from '../app.providers';

@Component({ 
  moduleId: module.id,
  template: `Error happened here!!!!`,
  directives: [ ROUTER_DIRECTIVES ],
  providers: [ APP_PROVIDERS ]
})

@Injectable()
export class ErrorHandler extends ExceptionHandler {

  call (exception: any, stackTrace?: any, reason?: string): void {


  }

}

I have an HTTP error that I'm forcing to occur in one of my services (to test the exception handling) and would expect my "global" handler to get called. Am I missing something? Unfortunately, not a whole lot of documentation out there right now...

TIA.

James

Upvotes: 1

Views: 583

Answers (1)

Poul Kruijt
Poul Kruijt

Reputation: 71921

No idea if that's the problem, but don't use a Component as an error handler. That's not the way to do it.

You just have to (not even necessary, but it looks cooler) implement the ExceptionHandler interface, not extend it. No need for @Injectable() (yet... maybe this handler will have dependencies in the future, and then it is necessary)

export class ErrorHandler implements ExceptionHandler {
  call(error, stackTrace = null, reason = null) {
    // do something with the exception
  }
}

You can keep your bootstrap the way it is

Upvotes: 3

Related Questions