javascript - 尝试扩展 Angular 2ExceptionHandler 类时没有提供程序异常

标签 javascript exception angular error-handling angular2-services

我创建了一个扩展 Angular 2 中的 ExceptionHandler 的类。我引导了这个:

bootstrap(App, [
  APP_ROUTER_PROVIDERS,
  HTTP_PROVIDERS,
  provide(ExceptionHandler, { useClass: CustomExceptionHandler }),

这工作得很好,当我尝试注入(inject)我的 API 服务时就会出现问题。我试过这个:

@Injectable()
export class CustomExceptionHandler extends ExceptionHandler {

  constructor( _exceptionApiService: ExceptionApiService) {
    super(new ArrayLogger(_exceptionApiService), true);
  }

  call(error, stackTrace = null, reason = null) {
    super.call(error, stackTrace, reason);
  }
}

然后是我的 ArrayLogger 类:

export class ArrayLogger {

  private _exceptionApiService: ExceptionApiService;

  constructor(_exceptionApiService: ExceptionApiService) {
    this._exceptionApiService = _exceptionApiService;
  }

  res = [];
  log(s: any): void { this.res.push(s); }
  logError(s: any): void { this.res.push(s); }
  logGroup(s: any): void { this.res.push(s); }
  logGroupEnd() {

    let error: Error;

    let message = this.res[0].replace('EXCEPTION: ', '');
    let stack = [];
    let index = this.findStackTrace(this.res);

    if (index === -1) {
      stack.push('Could not find stackTrace!');
    } else {
      this.res[index].split('\n').map(line => stack.push(line.trim()));
    }

    error = new Error({
      url: window.location.href,
      error: message,
      stack: stack,
      browser: this.getBrowser(navigator.userAgent),
      userAgent: navigator.userAgent,
      platform: navigator.platform,
      datetime: ''
    });

    this._exceptionApiService.post(error);

  }

  (...)

}

这给了我错误:

zone.min.js:1 Unhandled Promise rejection: (SystemJS) EXCEPTION: Error during instantiation of ApplicationRef_! (ApplicationRef -> ApplicationRef_).
    ORIGINAL EXCEPTION: No provider for ExceptionApiService! (ExceptionHandler -> ExceptionApiService)
    ORIGINAL STACKTRACE:
    Error: DI Exception
        at NoProviderError.BaseException [as constructor] (http://localhost:4200/vendor/@angular/core/src/facade/exceptions.js:27:23)
        at NoProviderError.AbstractProviderError [as constructor] 

如何正确注入(inject)我的ExceptionAPIService?

最佳答案

由于您要在 CustomExceptionHandler 中注入(inject) ExceptionApiService,因此您也需要提供它:

bootstrap(App, [
  APP_ROUTER_PROVIDERS,
  HTTP_PROVIDERS,
  ExceptionApiService,
  provide(ExceptionHandler, { useClass: CustomExceptionHandler }),

关于javascript - 尝试扩展 Angular 2ExceptionHandler 类时没有提供程序异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38614860/

相关文章:

javascript - $http 请求的后台处理通知

javascript - 将 excel 中的多个对象数组导出为多个工作表

android - 如何从 AsyncTask 抛出异常并在外部处理

typescript - ionic 2 : Changes in data model not updated in UI until interaction with UI

javascript - knockout . foreach 一个 child 的 child 不工作

javascript函数返回值未按预期工作

javascript - 抛出 JavaScript 异常的标准做法是什么?

c# - 如果内部发生异常,锁定的对象是否会保持锁定状态?

css - 不是第 n 个子选择器不在 sass 中工作

Angular 2 : How to use Observable filter