我已经仔细阅读了文档,尽管找不到确切的引用位置,但我的印象是,在急切加载的模块的providers
数组中声明服务将使单例可用于应用程序范围。如果是这样,
是否对任何非延迟加载的模块使用
@Injectable
providedIn
与providedIn: "root"
相同?
答案 0 :(得分:3)
是的。
通常,您应该始终只在@Injectable声明中使用provideIn:“ root”语法。它甚至可以在仅加载到一个模块中的情况下与延迟加载一起使用,因此,只有在角度加载模块之前,才加载该服务。这是一种更好的构造方法。
我认为偏爱providerIn的唯一两个例外是 1)您想在组件中声明它。这将导致它不是单例,而范围仅限于组件 2)您正在2个单独的但延迟加载的模块中使用它(并且在初始加载中也不使用它),在这种情况下,我认为最好的选择是通过在初始加载时将其引入AppModule来热切加载它。