我正在开发一个使用Angular 7的项目,我为构建的应用程序的各个模块提供了各种角度库,然后将其发布在(专用的)npm上,供应用程序使用。因此,所有角度库都通过其npm包导入了应用程序。
我面临的问题是我现在有2个模块互相导入,因为它们需要显示另一个模块中的组件。我不能将上述组件移到其他地方,因为它们依赖于服务和其他模块中的其他组件。
为使情况更清楚一点,我将举例说明我的情况。
我已经有了一个SharedModule
,其中包含一些在其他模块中使用的独立组件,然后我还为每个API服务都有一个模块。因此,我有一个UsersModule
,“ AdministrationModule”等。我的问题出在PlantModule
和FleetModule
上。
PlantModule
具有用于植物列表的组件(例如在发电厂中而不是有机植物中)和用于植物详细信息的组件。在详细信息组件中,还有其他外部组件,例如,显示分配给它的所有用户以及车队。
FleetsModule
还具有一个用于舰队列表的组件和一个用于详细信息的组件。在此详细信息组件中,还包括外部组件,例如分配的用户,机队列表和机队的工厂列表。
我要做的是让可重用的组件在其他模块中使用,这样我就无需在所有地方都复制粘贴所有API服务,组件等。
关于我在做什么或如何解决的任何想法?
为了解决该问题,我更改了需要这些组件的“页面”的结构。因此,与其在库中的其他组件中导入可重用组件,不如在主应用程序中创建包装视图并导入我需要的所有内容。
答案 0 :(得分:0)
因此,您有三个模块,DeskModule
,UsersModule
和OfficeSuppliesModule
。
DeskModule
导入了UsersModule
和OfficeSuppliesModule
,因为它在此模块的Component中有两个显示它们的组件。
问题是,在OfficeSuppliesModule
中,您有一个DeskModule
中的组件来显示其属于哪个办公桌。
我不太了解为什么要有一个组件来说明这一点?除了使用组件之外,您还可以利用可以在CoreModule
中使用的服务。通过此服务,您可以公开一种方法来告诉OfficeSuppliesModule
中组件的模板,这些办公用品属于哪个办公桌。由于不会有需要重复使用的组件,因此您不会遇到此问题。
您可以做的另一件事是将同时在DeskModule
和OfficeSuppliesModule
中使用的组件移到SharedModule,然后将SharedModule
添加到{{1 }} imports
和DeskModule
的数组
自Angular 6起,您可以将OfficeSuppliesModule
添加到providedIn: 'root'
装饰器中,而不是将服务名称添加到模块的@Injectable
数组中。这样,该服务便被注册到providers
注入器,并且在整个应用程序中都可用。
因此,您可以通过将root
添加到这些服务的providedIn: 'root'
装饰器中来更改多个模块中所需的所有那些服务:
@Injectable
然后按照此更新上方的建议,将@Injectable({
providedIn: 'root'
})
和PlantModule
中使用的组件移至FleetsModule
。