如何将我的服务注入ExceptionHandler

时间:2016-06-03 08:38:23

标签: angular

我在其他地方使用我的服务,通过角度2自动注入。 我想在ExceptionHandler中使用相同的服务。 但服务不会将数据发布到服务器。 我经历了debuger并且我的服务调用了。

class MyExceptionHandler extends ExceptionHandler {
  rbJSLogger: RBLoggerService;

  constructor() {
    super(null,null);
    var injector = ReflectiveInjector.resolveAndCreate([
      RBLoggerService,
      JSONP_PROVIDERS,
      Http,
      ConnectionBackend,
      HTTP_PROVIDERS
    ]);
    this.rbJSLogger = injector.get(RBLoggerService);
  }
  call(error, stackTrace = null, reason = null){
    // console.error(stackTrace);
    this.rbJSLogger.searchBy("asd");
  }
}

1 个答案:

答案 0 :(得分:2)

更新 ExceptionHandler已重命名为ErrorHandler https://stackoverflow.com/a/35239028/217408

<强> orgiginal

此代码

var injector = ReflectiveInjector.resolveAndCreate([...]);

创建一个新的独立注入器,它不了解Angular应用程序中提供的任何服务。

您可能希望在应用程序中注入Angular使用的注入器,如

class MyExceptionHandler extends ExceptionHandler {
  rbJSLogger: RBLoggerService;

  constructor(injector:Injector) {
    super(null,null);
    this.rbJSLogger = injector.get(RBLoggerService);
  }
  call(error, stackTrace = null, reason = null){
    // console.error(stackTrace);
    this.rbJSLogger.searchBy("asd");
  }
}

或只是

class MyExceptionHandler extends ExceptionHandler {
  rbJSLogger: RBLoggerService;

  constructor(private rbJSLogger:RBLoggerService) {
    super(null,null);
  }
  call(error, stackTrace = null, reason = null){
    // console.error(stackTrace);
    this.rbJSLogger.searchBy("asd");
  }
}