服务和组件之间的循环依赖关系警告(角度)

时间:2018-07-10 20:20:13

标签: angular angular-material angular-services circular-dependency angular-components

假设我们有以下内容: CoolModule(cool.module.ts)负责处理一些很酷的事情。 CoolModule包含以下内容:

  • CoolDialogComponent(cool-dialog.component.ts)
  • CoolService(cool.service.ts)
  • ...其他很棒的文件

使用CoolModule的应用程序通过CoolService使用其功能,CoolService是可注入的单例服务。

CoolDialogComponent有很多不错的方法。其中之一可以打开物料对话框。它将CoolDialogComponent传递给对话框,以将其用作对话框的内容。

CoolService有一个特殊的动作,它调用CoolDialogComponent的方法之一。

此时:

  • CoolService依赖于CoolService
  • CoolDialogComponent依赖于CoolService

我是这里唯一的一个认为仅出于循环依赖警告而不应重构此内容的人吗?

  • 我认为CoolDialogComponent是一项可注入的服务,我们可以通过它使用其功能。
  • CoolModule通过定义模式对话框的内容来完成任务。而且可以调用它的方法。
  • 它们两个都在<packaging>war</packaging> 中绑定在一起,彼此之间不存在。
  • 创建附加服务来解决循环依赖警告似乎有点像强奸其结构。

请向我解释我在这里看不到的要点! 和/或提供解决方案以消除警告! (不,我不想在angular-cli的配置中将其关闭。)

1 个答案:

答案 0 :(得分:1)

  

CoolDialogComponent具有一个特殊的操作,该操作调用CoolService的方法之一。

在另一个TypeScript文件中定义CoolServiceInterface

export interface CoolServiceInterface {
    sharedMethod();
}

让服务实现该接口,并使组件仅引用该接口。

  

CoolService有很多很酷的方法。其中之一可以打开物料对话框。它为对话框传递CoolDialogComponent,以将其用作对话框的内容。

创建模态对话框时,

CoolService应该将新的CoolDialogContext类注入CoolDialogComponent中。使用组件工厂创建模式对话框时,有一种方法可以在创建之前添加提供程序,但是这里的要点是CoolService应该用于创建模式,并且 context 用于管理模式的生命周期。