Angular 2 使用一个模块而不导入它

Angular 2 use a module without importing it

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

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

我试过只放在app模块里导出,但是好像没有效果。

所以我的问题是:是否可以在app模块中声明一个模块,这样我们就可以在不在子模块中声明的情况下使用它?

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

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

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

为了减轻麻烦,您可以做的是创建一个 SharedModule re-exports 在整个应用程序中重复使用的所有功能。这样一来,您只需将该模块导入到需要共享功能的其他模块中。这意味着您仍然至少 每个模块有一个导入 ,但无论如何已经是这样了,因为您很可能在所有模块中都需要 CommonModule 之类的东西。 (我相信这种 SharedModule 技术是官方文档在 Module section 中推荐的技术)。