7

In angular2 the exceptions are logged in the console by default. I heard that we can inherit the Angular ExceptionHandler and create our own exception handler so that we can override the default behavior. I tried to do it but didn't work. Can anyone help me on this with an example. Thanks in advance ....

1

3 Answers 3

13

As of version 2.0.1, the current way of creating a custom error handler is the ErrorHandler interface found in @angular/core.

From the docs:

https://angular.io/docs/ts/latest/api/core/index/ErrorHandler-class.html

import { NgModule, ErrorHandler } from '@angular/core';

class MyErrorHandler implements ErrorHandler {
  handleError(error) {
    // do something with the exception
  }
}
@NgModule({
  providers: [{ provide: ErrorHandler, useClass: MyErrorHandler }]
})
class MyModule {}

When applying this on the root module, all children modules will receive the same error handler (unless they have another one specified in their provider list).

Sign up to request clarification or add additional context in comments.

1 Comment

where i add this myErrorHandler class?
5

It looks like you need to create your own class to handle exceptions, and then bind it in your app at bootstrap time, something like this:

import {provide, ExceptionHandler} from '@angular/core';

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

And then at bootstrap time, bind this new implementation as the ExceptionHandler:

bootstrap(MyApp, 
    [provide(ExceptionHandler, {useClass: MyExceptionHandler})])

See here for reference.

Plunker example

4 Comments

And there is only one little problem: how are you going to get ExceptionHandler?)
I tried to add the custom exception handler but didn't work . Anyone has a working example ?
I am getting an exception when i tried with custom exception handler - "Cannot resolve all parameters for MyExceptionHandler(?, Boolean). Make sure they all have valid type or annotations."
Right now i believe provide method is deprecated. This should also work: {provide: ExceptionHandler, useClass: MyExceptionHandler}
0

Here's an exception handler that works in alpha .46

import {ExceptionHandler} from 'angular2/angular2';

export class ERISExceptionHandler extends ExceptionHandler {

    call(error, stackTrace = null, reason = null) {
        alert('error:' + error + ' stackTrace: ' + stackTrace + ' reason: ' + reason);
    }
}

1 Comment

Except that it will bomb trying to super.call(error, stackTrace, reason). It would be great to keep the nice angular error messages going with a custom exception handler.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.