我正在使用Angular中的ErrorHandler。如果我只使用一个模块,它工作正常。当我使用多个模块并希望在特定子模块中使用不同的错误处理程序时,它不起作用。只调用父错误处理程序。
RootModule
|--> provides CustomErrorHandler1
|
|--> ChildModule1
| |--> provides CustomErrorHandler2
|
|--> ChildModule2
|--> provides CustomErrorHandler1
如果在ChildModule1或ChildModule2中发生错误,则错误始终由RootModule的CustomErrorHandler1实例处理。
我正在使用延迟加载来加载这些模块。提供相同服务的不同实例适用于除错误处理程序之外的所有@Injectable()。
是否可以提供这些ErrorHandler,以便每个模块中的错误将由其模块定义中提供的ErrorHandler处理?
我在github创建了一个示例存储库。它可以通过ng serve
运行。如果单击“child1”,Childmodule1将抛出一个错误,如果单击“child2”,Childmodule2将抛出错误。
答案 0 :(得分:2)
ErrorHandler =>提供集中异常处理的钩子。
所以我只注册了一个ErrorHandler
来拦截所有Exceptions
,然后我将错误委托给component based ErrorHandlers
并处理了其中的数据。每个child
组件都拥有自己的Error
,并且基于instanceof
我们会将错误委托给ErrorHandler
内的相应component
。< / p>
注意:这样做的缺点是,通过Error
检查的任何error instanceof Error
都会被委托给Global registered handler
内的app.module.ts
内部ErrorHandlers
}
我也知道这种方法可能不是最好的,但是没有注册多个per component
Global
而是{{1}}一个然后处理的方法里面的一切。希望这可以帮助您以正确的方式解决问题。
我还更新了nikola_gavric
分支,以便您可以看到我在那里做了什么
答案 1 :(得分:0)
你能分享一下模块???
的代码吗?从你的观点来看,自从Angular路由是lazyLoaded以来它没有任何意义,在编译时创建一个注入器层次结构。这应该会产生你正在寻找的效果。
我的建议是:
at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:455)
答案 2 :(得分:0)
答案是,ErrorHandling只适用于RootModules,Angular团队不愿意解决这个问题: