Angular 2和ngmodule进样器

时间:2016-09-20 18:45:21

标签: javascript angular

NGmodule提供了一种在模块中组织代码的方法。

它还建议提供一些服务作为模块的属性,我不理解它的工作方式。

首先,这意味着如果我在NGmodule的提供属性中添加服务,它将公开服务(意味着我必须在内部调用模块)另一个使用其服务)?

那么,是否有NGmodule注射器水平?

如何在另一个模块的模块框外使用服务?

1 个答案:

答案 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页面也非常实用。