【问题标题】:Custom Exception Handler in Angular2Angular2中的自定义异常处理程序
【发布时间】:2015-12-05 22:27:37
【问题描述】:

在 angular2 中,默认情况下异常会记录在控制台中。我听说我们可以继承 Angular ExceptionHandler 并创建自己的异常处理程序,以便我们可以覆盖默认行为。我试着去做,但没有奏效。谁能帮我举个例子。提前谢谢....

【问题讨论】:

标签: angular


【解决方案1】:

从 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 {}

在根模块上应用此功能时,所有子模块都将收到相同的错误处理程序(除非它们的提供程序列表中指定了另一个错误处理程序)。

【讨论】:

  • 我在哪里添加这个 myErrorHandler 类?
【解决方案2】:

看起来您需要创建自己的类来处理异常,然后在引导时将其绑定到您的应用中,如下所示:

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

Plunker example

【讨论】:

  • 而且只有一个小问题:你要如何获取ExceptionHandler?)
  • 我尝试添加自定义异常处理程序,但没有成功。有人有一个可行的例子吗?
  • 我在尝试使用自定义异常处理程序时遇到异常 - “无法解析 MyExceptionHandler(?, Boolean) 的所有参数。确保它们都具有有效的类型或注释。”
  • 现在我相信provide 方法已被弃用。这也应该有效:{provide: ExceptionHandler, useClass: MyExceptionHandler}
【解决方案3】:

这是一个适用于 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)。使用自定义异常处理程序保持漂亮的角度错误消息会很棒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 2015-10-18
  • 2023-03-04
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多