Angular 2/4+ 共享模块:到 forRoot() 或不到 forRoot()



自从挖掘了 Angular 依赖注入 (DI( 的前几个基本级别,并找到了 forRoot(( 的宝石以来,我一直想知道实际使用它的最佳实践到底是什么。

在寻找一种方法来允许延迟加载的模块访问根上下文中的服务时,我偶然发现了该方法,允许在两个模块之间共享数据流,其中一个或两个模块可能是延迟加载的。从那时起,我就想知道,您能否将 forRoot(( 用于共享模块中的所有内容并在整个应用程序中保存大量导入语句?有什么收获?是否有某些东西很容易用于根,而其他东西则不然?还是 root 主要是为了桥接延迟加载模块时解决上述 DI 上下文问题而开发的?

forRoot()

的目的是在应用程序中具有singleton services

forRoot()的含义是只有一个由该ModuleWithProviders导出的service实例。如果没有forRoot(),如果您在模块的providers中添加了service并在许多位置使用该模块,则可以在应用程序的不同层中拥有该service的许多实例。 使用forRoot(),它将创建一个service的新实例,如果最后一个实例在任何地方都找不到。

forRoot静态方法只是配置模块提供程序的约定。

例如:RouterModule.forRoot: 将路由传递给forRoot方法,以便使用路由配置应用范围的路由器服务。

使用在应用中随处使用的组件、指令和管道创建 SharedModule。

出于此处解释的原因,共享模块不应具有提供程序。其任何导入或再导出的模块也不应有提供程序。如果您偏离了本指南,请知道您在做什么以及为什么。

最新更新