如果主模块AppModule
中已包含此模块,为什么我应该在子模块中包含CommonModule?
AppModule(Root) -> includes -> CommonModule
CustomModule -> incudes -> CommonModule
AppModule -> incudes -> CustomModule>
我认为CommonModule
在CustomModule
中是多余的,因为它是在CommonModule
中全局声明的?是吗?
答案 0 :(得分:2)
这是因为,如果要在CommonModule
中使用CustomModule
的任何导出功能(组件,指令,管道),则必须添加CommonModule
才能做到这一点到imports
的{{1}}数组中。
如果您将CustomModule
导入了CommonModule
,您将只能使用已注册的AppModule
的导出成员(添加到CommonModule
的{{1}})组件,指令,管道等。如果您从declarations
中导出AppModule
,因为CommonModule
是您的根模块,并且您不会将其添加到任何其他模块的AppModule
数组中,则不会除非在此导入,也可以在其他任何地方使用AppModule
的导出成员。
您可以在CustomModule(如果为imports
中使用CommonModule中的服务(尽管不建议这样做),因为它们已在根注入器上注册。但是除此之外,除非将其导入,否则将无法使用。
CommonModule
(或providedIn: 'root'
来提供服务)提供服务?请考虑不在共享模块中提供服务。服务通常是单例,为整个应用程序或特定功能模块提供一次。但是也有例外。例如,在下面的示例代码中,请注意,SharedModule提供了FilterTextService。这在这里是可以接受的,因为该服务是无状态的;也就是说,该服务的使用者不会受到新实例的影响。