Angular2:将包含指令和服务的功能分解为模块的最佳做法是什么?

Angular2: what is the best practice to decompose into module(s) a feature that contains both a directive and a service?

我计划在 Angular2 中开发一项功能来为社区做贡献。

该功能由一个指令和一项服务组成。

我想知道如何才能最好地将功能打包到一个模块(或多个模块)中。

为了让它工作,我必须创建两个不同的模块:一个包含服务,应该由核心模块导入和重新导出;另一个包含指令,可以在用户需要的地方导入,或者在共享模块中全局导入

现在,我有点不喜欢这种配置,因为我必须将我的功能分成两个模块。

知道 Angular2 工作原理的用户应该能够毫无问题地设置它,我知道,但我仍然希望能够将所有内容都包装在一个模块中?目前实现这一目标的最佳做法是什么?

目前我没有看到任何不同的解决方案:因为如果我将服务和指令放在同一个模块中,那么当我需要在组件中导入指令时,服务将包含在同一个导入中;如果组件是延迟加载的,这将为该组件创建第二个服务副本,这是错误的。

在此先感谢您的帮助

在模块的 .forRoot() 中提供服务,并要求使用 MyModule.forRoot() 将其导入到 AppModule 中(就像在 Router 模块中所做的那样)。

forRoot 添加到您的模块

static forRoot(config: UserServiceConfig): ModuleWithProviders {
  return {
    ngModule: CoreModule,
    providers: [
      {provide: UserServiceConfig, useValue: config }
    ]
  };
}

此外,每个想要使用该组件的模块都需要使用

导入模块
imports: [
  BrowserModule,
  ContactModule,
  CoreModule.forRoot({userName: 'Miss Marple'}),
  AppRoutingModule
],

有关详细信息,请参阅 https://angular.io/guide/ngmodule#configure-core-services-with-coremoduleforroot