2016-09-20 84 views
1

NGmodule提供了一种组织模块中代码的方法。Angular 2和ngmodule注入器

它也建议提供一些服务作为模块的一个属性,我不明白它的工作方式。

首先意思是,如果我添加在服务提供NGmodule的属性,则暴露服务(这意味着我必须调用模块另外一个内部使用的服务)?

那么,有没有NG模块喷油器级别?

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

回答

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页面也非常有用。