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