2

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

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

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

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

4

1 回答 1

2

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

HttpModuleAngular 为例。您只需在根模块中导入一次,然后将Http服务注入应用程序的任何位置。那是因为它包含服务(除其他外),并且在其中声明的服务@NgModule.providers是全局可注入的。

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

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

于 2017-01-24T10:50:18.667 回答