【发布时间】:2019-04-26 21:30:07
【问题描述】:
我正在尝试创建一个全局错误处理组件,为此,我提供了自定义 ErrorHandler 类。我想通过 error.service.ts 中的构造函数注入路由器,以便我可以导航到错误组件,但它失败并出现以下错误。
compiler.js:18429 未捕获错误:提供程序解析错误: 无法实例化循环依赖! ApplicationRef ("[ERROR ->]"): in NgModule AppModule in ./AppModule@-1:-1
这里是项目的链接。 https://stackblitz.com/edit/angular-q56xm8
请检查 error.service.ts,如果我取消注释第一个实现,它可以工作,但我想使用以下方法使其工作。
【问题讨论】:
-
你不能使用第二种方法,因为错误消息中写的问题:会有一个循环依赖:路由器直接或间接需要错误句柄和错误处理程序需要路由器。只需使用第一种方式:这是处理问题的正确方式。
-
如果我在组件构造函数中注入但在服务中不起作用,请您详细说明一下它是如何工作的。
-
好吧,你可以在组件中注入路由器,因为路由器的依赖项中没有你的组件。所以这不会产生循环依赖。但是路由器需要错误处理程序。因此,如果错误处理程序也需要路由器,则会产生循环依赖。