1

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

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

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

  • 服务必须是全局的,所以它必须由用户导入到核心模块中——它不能被导入到延迟加载的模块中。
  • 该指令可以在用户需要使用的地方导入

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

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

我知道,知道 Angular2 如何工作的用户应该能够毫无问题地设置它,但如果可以将所有内容包装在 ONE 模块中,我仍然更愿意?目前实现这一目标的最佳实践是哪些?

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

在此先感谢您的帮助

4

1 回答 1

1

在您的模块中提供服务.forRoot()并要求将其导入 AppModule 中MyModule.forRoot()(例如使用 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

于 2017-11-02T09:26:39.523 回答