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 中推荐的技术)。
这听起来可能很愚蠢,但我想知道是否有一种方法可以一次导入一个模块,并使其可用于所有子模块。
例如,我想在我的所有模块中使用 MaterialModule。目前,我必须在每个模块中导入它,声明它,然后我才能使用它。
我试过只放在app模块里导出,但是好像没有效果。
所以我的问题是:是否可以在app模块中声明一个模块,这样我们就可以在不在子模块中声明的情况下使用它?
这取决于模块包含的内容。
以Angular中的HttpModule
为例。您可以只在根模块中导入一次,然后在应用程序的任何位置注入 Http
服务。那是因为它包含 services(除其他外)并且在 @NgModule.providers
中声明的服务是全局可注入的。
但是,如果您的模块包含 组件、指令等 (我怀疑 MaterialModule
确实如此),那么您确实需要在任何模块中显式导入它使用这些组件、指令等的地方。
为了减轻麻烦,您可以做的是创建一个 SharedModule
re-exports 在整个应用程序中重复使用的所有功能。这样一来,您只需将该模块导入到需要共享功能的其他模块中。这意味着您仍然至少 每个模块有一个导入 ,但无论如何已经是这样了,因为您很可能在所有模块中都需要 CommonModule
之类的东西。 (我相信这种 SharedModule
技术是官方文档在 Module section 中推荐的技术)。