Angular 在自定义ErrorHandler中使用服务

Angular 在自定义ErrorHandler中使用服务,angular,dependency-injection,error-handling,angular-routing,sentry,Angular,Dependency Injection,Error Handling,Angular Routing,Sentry,我在我的项目中实现了以下ErrorHandler: 导出类RavenErrorHandler实现ErrorHandler{ handleError(错误:任意):无效{ Raven.captureException(错误原始错误); } }您不能直接注入路由器,但您可以使用注射器在handlerError方法中获取路由器实例 不要忘记将@Injectable()装饰器添加到自定义处理程序中 @Injectable() export class MyErrorHandler extends Er

我在我的项目中实现了以下
ErrorHandler

导出类RavenErrorHandler实现ErrorHandler{
handleError(错误:任意):无效{
Raven.captureException(错误原始错误);
}

}
您不能直接注入
路由器
,但您可以使用注射器在
handlerError
方法中获取
路由器
实例

不要忘记将
@Injectable()
装饰器添加到自定义处理程序中

@Injectable()
export class MyErrorHandler extends ErrorHandler {
  constructor(private service: TestService, private zone: NgZone, private inj: Injector) {
    super();
  }

  handleError(err) {
    let router = this.inj.get(Router);
    debugger;
  }
}
测试它

不要在下面读:)这是内在逻辑

因此,根据我们的代码生成的模块工厂将如下所示:

AppModuleInjector.prototype.createInternal = function() {
  var self = this;
  self._CommonModule_0 = new jit_CommonModule27();
  self._TestService_1 = new jit_TestService28();
  self._ErrorHandler_2 = new jit_MyErrorHandler29(self._TestService_1,self.parent.get(jit_NgZone16),self);

如果只在构造函数中引用它们会发生什么?类
RavenErrorHandler{构造函数(as:AlertService,r:Router)
?我没有尝试,因为我看到angular.io文档中的构造函数不推荐使用!这不可能是真的,你能提供一个链接吗?尝试一下,但别忘了将你的
AlertService
注册为提供者是的,这不是
构造函数不推荐使用,而是参数哈,我第一次尝试了构造函数e、 但它不起作用……我忘记了@Injectable这个奇怪的东西,我仍然得到了
未处理的承诺拒绝
哦,我认为它起作用了;你必须从构造函数中删除
私有服务:TestService
!就在我的示例中,我使用了TestService