为何Angular自定义Error Handler被覆盖?配置疑问
Angular自定义错误处理器问题解析
1. 自定义处理器必须放在importProvidersFrom之后的原因及被覆盖对象
Angular依赖注入的核心规则是后注册的同令牌提供者会覆盖先注册的。
当你用importProvidersFrom导入BrowserAnimationsModule时,这个模块(或其依赖的子模块)内部会注册一个ErrorHandler实例。如果你的GlobalErrorHandler写在importProvidersFrom(BrowserAnimationsModule)前面,模块导入时新增的错误处理器就会把你的自定义实现覆盖掉;反过来把自定义处理器放在后面,就能覆盖模块带来的默认处理器。
具体被覆盖的是BrowserAnimationsModule导入链中带进来的默认ErrorHandler,也不排除你引入的Kendo UI组件库部分模块附带的错误处理器,但最直接的触发因素就是BrowserAnimationsModule的导入。
2. Angular Dev Tools里另外两个错误处理器的来源
从你的依赖清单来看,这两个处理器的来源主要是:
- Angular核心默认处理器:Angular根注入器会默认注册一个
ErrorHandler(来自@angular/core的原生实现),这是第一个基础处理器。 - 第三方组件库处理器:你引入的大量Kendo UI Angular组件(
@progress/kendo-angular-*系列),部分模块会注册专属的错误处理器来处理组件内部异常,这是第二个额外的处理器。
另外,BrowserAnimationsModule导入时带来的处理器也可能是其中之一,和第一个问题里的覆盖逻辑对应。
内容的提问来源于stack exchange,提问作者Marko
相关产品推荐
相关产品推荐

