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 ....

Vinz and Tonz
  • 3,487
  • 5
  • 21
  • 32
  • look at this http://stackoverflow.com/questions/32980405/module-angular2-angular2-has-no-exported-member-exceptionhandler – Gustavo Oct 09 '15 at 17:12

3 Answers3

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).

DerekMT12
  • 1,329
  • 11
  • 15
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

Günter Zöchbauer
  • 623,577
  • 216
  • 2,003
  • 1,567
Angular University
  • 42,341
  • 15
  • 74
  • 81
  • 1
    And there is only one little problem: how are you going to get ExceptionHandler?) – alexpods Sep 10 '15 at 21:08
  • I tried to add the custom exception handler but didn't work . Anyone has a working example ? – Vinz and Tonz Sep 11 '15 at 22:18
  • 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." – Vinz and Tonz Sep 13 '15 at 00:05
  • Right now i believe `provide` method is deprecated. This should also work: `{provide: ExceptionHandler, useClass: MyExceptionHandler}` – Adam Szmyd Jul 29 '16 at 10:29
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);
    }
}
Andrew Walters
  • 4,763
  • 6
  • 35
  • 49
  • 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. – asido Aug 03 '16 at 19:46