是否对任何非延迟加载的模块使用@Injectable提供的In和提供的In:“ root”相同?

pap*_*iro 5 angular angular-di

我已经仔细阅读了文档,尽管找不到确切的引用位置,但我的印象是,在急切加载的模块providers数组中声明服务将使单例适用于应用程序范围。如果这是真的,

是使用@Injectable providedIn任何非延迟加载模块一样providedIn: "root"

bgr*_*ham 6

是的,它是一样的。

通常,您应该始终只在 @Injectable 声明中使用 providedIn: "root" 语法。当它刚刚加载到一个模块中时,它甚至可以使用延迟加载,因此在 angular 加载模块之前不会加载服务。它是一种更好的构造方式。

我认为首选providedIn的唯一2个例外是1)您想在组件中声明它。这将导致它不是一个单例,而是限定于组件 2)您在 2 个单独的模块中使用它,但是两个延迟加载的模块(并且它也没有在初始加载中使用),在这种情况下我相信最好的选择通过在初始加载时将其带入 AppModule 来急切地加载它。