Angular 2使用模块而不导入它

时间:2017-01-24 10:41:21

标签: angular angular2-material angular2-modules

这可能听起来很愚蠢,但我想知道是否有一种导入模块的方法,并使其可用于所有子模块。

例如,我想在所有模块中使用MaterialModule。目前,我必须在每个模块中导入它,声明它,然后我可以使用它。

我尝试将它只放在app模块中,导出它,但它似乎没有效果。

所以我的问题是:是否有可能在app模块中声明一个模块,以便我们可以在子模块中使用它而不用声明它?

1 个答案:

答案 0 :(得分:1)

这取决于模块包含的内容。

以Angular的HttpModule为例。您只需在根模块中导入一次,然后在应用程序的任何位置注入Http服务即可。这是因为它包含服务(以及其他内容)和@NgModule.providers中声明的服务可全局注入。

但是,如果您的模块包含组件,指令等(我怀疑MaterialModule确实如此),那么您需要在任何模块中明确地导入它,这些组件,指令等等。

为缓解麻烦,您可以创建一个SharedModule,重新导出在整个应用中重复使用的所有功能。这样,您只需要在需要共享功能的其他模块中导入该模块。这意味着您仍然至少每个模块一次导入,但无论如何已经是这种情况,因为您可能在所有模块中都需要CommonModule之类的东西。 (我相信这种SharedModule技术是官方文档在Module section中推荐的。)