微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有错误处理程序的角圆形参考

如何解决带有错误处理程序的角圆形参考

我正在将功能转移到功能模块,并最终延迟加载。

常规观点表明,应在应用程序范围内的单例服务中提供一个核心模块,该模块只能由Root模块加载一次(请参阅https://frontpills.com/posts/2019/core-shared-modules/https://github.com/gothinkster/angular-realworld-example-app/blob/master/src/app/app.module.ts)。

所以我已经在Core中设置了错误处理:

import { ErrorHandler } from '@angular/core';
import { MyErrorHandler } from 'src/app/core/services/my-error-handler';

providers: [
    {
        provide: ErrorHandler,useClass: MyErrorHandler
    }
]

然后,在my-error-handler.ts中:

import { CoreModule } from '../../core/core.module';

@Injectable({
    providedIn: CoreModule
})
export class HubErrorHandler implements ErrorHandler {
...
}

显然,循环引用是CoreModule-> MyErrorHandler-> CoreModule。

但是我的问题是:我还应该装饰MyErrorHandler吗? @Injectable({provedIn:CoreModule})语法是首选的命名法:

来自https://angular.io/guide/providers#providedin-and-ngmodules

以上示例显示了在模块中提供服务的首选方式。首选此方法,因为如果没有注入,它将启用服务的树状摇动。

那么解决这种情况的正确方法是什么?我是否应该从服务中删除“ providedIn”并将服务添加到CoreModule的providers数组?

谢谢。

解决方法

如果要使用应用程序范围内的单例服务,则可以将“ root”指定为providerIn的值:

import { Injectable } from '@angular/core';

@Injectable({
    providedIn: 'root'
})
export class HubErrorHandler implements ErrorHandler {
...
}

官方文档here

,

我最终只是将我的服务添加到Core模块的providers数组中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?