库之间的Angular 6/7循环依赖关系

时间:2018-10-23 13:37:14

标签: angular angular6 circular-dependency angular7

我正在开发一个使用Angular 7的项目,我为构建的应用程序的各个模块提供了各种角度库,然后将其发布在(专用的)npm上,供应用程序使用。因此,所有角度库都通过其npm包导入了应用程序。

我面临的问题是我现在有2个模块互相导入,因为它们需要显示另一个模块中的组件。我不能将上述组件移到其他地方,因为它们依赖于服务和其他模块中的其他组件。

为使情况更清楚一点,我将举例说明我的情况。

我已经有了一个SharedModule,其中包含一些在其他模块中使用的独立组件,然后我还为每个API服务都有一个模块。因此,我有一个UsersModule,“ AdministrationModule”等。我的问题出在PlantModuleFleetModule上。

  • 电厂中的电厂
  • 车队和/或其他团体中的车队 舰队,但也有自己的财产

PlantModule具有用于植物列表的组件(例如在发电厂中而不是有机植物中)和用于植物详细信息的组件。在详细信息组件中,还有其他外部组件,例如,显示分配给它的所有用户以及车队。

FleetsModule还具有一个用于舰队列表的组件和一个用于详细信息的组件。在此详细信息组件中,还包括外部组件,例如分配的用户,机队列表和机队的工厂列表。

我要做的是让可重用的组件在其他模块中使用,这样我就无需在所有地方都复制粘贴所有API服务,组件等。

关于我在做什么或如何解决的任何想法?

更新

为了解决该问题,我更改了需要这些组件的“页面”的结构。因此,与其在库中的其他组件中导入可重用组件,不如在主应用程序中创建包装视图并导入我需要的所有内容。

1 个答案:

答案 0 :(得分:0)

因此,您有三个模块,DeskModuleUsersModuleOfficeSuppliesModule

DeskModule导入了UsersModuleOfficeSuppliesModule,因为它在此模块的Component中有两个显示它们的组件。

问题是,在OfficeSuppliesModule中,您有一个DeskModule中的组件来显示其属于哪个办公桌。

我不太了解为什么要有一个组件来说明这一点?除了使用组件之外,您还可以利用可以在CoreModule中使用的服务。通过此服务,您可以公开一种方法来告诉OfficeSuppliesModule中组件的模板,这些办公用品属于哪个办公桌。由于不会有需要重复使用的组件,因此您不会遇到此问题。

您可以做的另一件事是将同时在DeskModuleOfficeSuppliesModule中使用的组件移到SharedModule,然后将SharedModule添加到{{1 }} importsDeskModule的数组

更新

自Angular 6起,您可以将OfficeSuppliesModule添加到providedIn: 'root'装饰器中,而不是将服务名称添加到模块的@Injectable数组中。这样,该服务便被注册到providers注入器,并且在整个应用程序中都可用。

因此,您可以通过将root添加到这些服务的providedIn: 'root'装饰器中来更改多个模块中所需的所有那些服务:

@Injectable

然后按照此更新上方的建议,将@Injectable({ providedIn: 'root' }) PlantModule中使用的组件移至FleetsModule