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

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

首先,这是否意味着如果我在NGmodule的Provides属性中添加服务,它将公开该服务(这意味着我必须在另一个模块中调用该模块才能使用其服务)?

因此,是否存在NGmodule喷射器液位?

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

最佳答案

在模块中提供服务意味着该服务将被实例化并提供给该模块中的所有组件,指令和管道。此处的“实例化”是关键-由于服务是单例,因此模块必须跟踪使用它们的每个组件,指令或管道的服务。您也可以在单个组件中提供服务,但是这将实例化每个组件中的每个服务,从而有效地消除了我们首先使用单例服务的原因。在模块级别提供它可以为我们解决这个问题。

如果您想使服务在模块之外可用,则无需执行任何操作。在项目中导入的模块中提供服务意味着该服务已在项目中的任何位置可用。

相关: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页面也很有用。

关于javascript - Angular 2和ngmodule注入(inject)器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39601581/

10-16 00:05