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
我计划在 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