【发布时间】:2015-12-05 22:27:37
【问题描述】:
在 angular2 中,默认情况下异常会记录在控制台中。我听说我们可以继承 Angular ExceptionHandler 并创建自己的异常处理程序,以便我们可以覆盖默认行为。我试着去做,但没有奏效。谁能帮我举个例子。提前谢谢....
【问题讨论】:
标签: angular
在 angular2 中,默认情况下异常会记录在控制台中。我听说我们可以继承 Angular ExceptionHandler 并创建自己的异常处理程序,以便我们可以覆盖默认行为。我试着去做,但没有奏效。谁能帮我举个例子。提前谢谢....
【问题讨论】:
标签: angular
从 2.0.1 版开始,当前创建自定义错误处理程序的方法是在 @angular/core 中找到的 ErrorHandler 接口。
来自文档:
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 {}
在根模块上应用此功能时,所有子模块都将收到相同的错误处理程序(除非它们的提供程序列表中指定了另一个错误处理程序)。
【讨论】:
看起来您需要创建自己的类来处理异常,然后在引导时将其绑定到您的应用中,如下所示:
import {provide, ExceptionHandler} from '@angular/core';
class MyExceptionHandler implements ExceptionHandler {
call(error, stackTrace = null, reason = null) {
// do something with the exception
}
}
然后在引导时,将此新实现绑定为 ExceptionHandler:
bootstrap(MyApp,
[provide(ExceptionHandler, {useClass: MyExceptionHandler})])
参考here。
【讨论】:
provide 方法已被弃用。这也应该有效:{provide: ExceptionHandler, useClass: MyExceptionHandler}
这是一个适用于 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);
}
}
【讨论】:
super.call(error, stackTrace, reason)。使用自定义异常处理程序保持漂亮的角度错误消息会很棒。