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

时间:2017-07-25 06:08:20

标签: angular typescript rxjs angular-services angular-module

自从挖掘角度依赖注入(DI)的前几个基本级别,并且击中了用于Root()的gem之后,我一直想知道实际使用它的最佳实践是什么。

我在寻找允许延迟加载的模块访问根上下文中的服务的方法时偶然发现了该方法,允许在两个模块之间共享数据流,其中一个或两个模块可能是懒惰的。从那以后我想知道,你可以为共享模块中的所有内容使用forRoot()并在整个应用程序中保存大量的import语句吗?捕获量是多少?是否存在某些易于用于root的东西,以及其他不可用的东西?或者主要是为了在桥接延迟加载的模块时桥接上述DI上下文问题的根目录?

2 个答案:

答案 0 :(得分:7)

forRoot()的目的是在应用程序中使用singleton services

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

答案 1 :(得分:1)

forRoot静态方法只是配置模块提供商的惯例。

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

使用您在应用中的任何位置使用的组件,指令和管道创建SharedModule。

SharedModule不应包含reasons explained here的提供程序。任何进口或再出口的模块也不应该有供应商。如果您偏离本指南,请了解您正在做什么以及为什么。