NGmodule提供了一种在模块中组织代码的方法。
它还建议提供一些服务作为模块的属性,我不理解它的工作方式。
首先,这意味着如果我在NGmodule的提供属性中添加服务,它将公开服务(意味着我必须在内部调用模块)另一个使用其服务)?
那么,是否有NGmodule注射器水平?
如何在另一个模块的模块框外使用服务?
答案 0 :(得分:2)
在模块中提供服务意味着该服务将被实例化,并且可供作为该模块一部分的所有组件,指令和管道使用。 “实例化”这个词在这里是关键 - 因为服务是单例,模块必须跟踪使用它们的每个组件,指令或管道的服务。您还可以在单个组件中提供服务,但这会在每个组件中实例化每个服务,从而有效地否定了我们首先使用单件服务的原因。在模块级提供它可以解决这个问题。
如果您想在模块之外提供服务,则无需执行任何操作。在项目中导入的模块中提供服务意味着它已在项目的任何位置可用。
相关:Why is a service provided in a feature module available everywhere?
如果您想在模块外部提供组件,指令或管道,则必须导出它们(并将它们导入到您要使用它们的模块中)。您可以通过在模块中使用export关键字来实现。
相关:What classes should I export?
例如,您可以使用NgIf指令,因为它是从CommonModule(docs)导出的,然后我们将在我们自己的模块中导入:
@NgModule({
declarations: [COMMON_DIRECTIVES, COMMON_PIPES],
exports: [COMMON_DIRECTIVES, COMMON_PIPES],
providers: [
{provide: NgLocalization, useClass: NgLocaleLocalization},
],
})
有趣的事实:如果你只有一个模块(引导程序的根模块),那么你实际上只会使用BrowserModule而不是CommonModule。 CommonModule的所有功能都在BrowserModule中的原因是BrowserModule只是导入并重新导出整个CommonModule。
如果您想了解更多信息,可以在angular2的网站上找到module system的深入指南。我之前链接的FAQ页面也非常实用。