自从挖掘了 Angular 依赖注入 (DI( 的前几个基本级别,并找到了 forRoot(( 的宝石以来,我一直想知道实际使用它的最佳实践到底是什么。
在寻找一种方法来允许延迟加载的模块访问根上下文中的服务时,我偶然发现了该方法,允许在两个模块之间共享数据流,其中一个或两个模块可能是延迟加载的。从那时起,我就想知道,您能否将 forRoot(( 用于共享模块中的所有内容并在整个应用程序中保存大量导入语句?有什么收获?是否有某些东西很容易用于根,而其他东西则不然?还是 root 主要是为了桥接延迟加载模块时解决上述 DI 上下文问题而开发的?
forRoot()
的目的是在应用程序中具有singleton services
。
forRoot()
的含义是只有一个由该ModuleWithProviders
导出的service
实例。如果没有forRoot()
,如果您在模块的providers
中添加了service
并在许多位置使用该模块,则可以在应用程序的不同层中拥有该service
的许多实例。 使用forRoot()
,它将创建一个service
的新实例,如果最后一个实例在任何地方都找不到。
forRoot
静态方法只是配置模块提供程序的约定。
例如:RouterModule.forRoot
: 将路由传递给forRoot
方法,以便使用路由配置应用范围的路由器服务。
使用在应用中随处使用的组件、指令和管道创建 SharedModule。
出于此处解释的原因,共享模块不应具有提供程序。其任何导入或再导出的模块也不应有提供程序。如果您偏离了本指南,请知道您在做什么以及为什么。