对任何非延迟加载模块使用@Injectable providedIn 是否与providedIn: "root" 相同?

Is using @Injectable providedIn for any non-lazy-loaded module the same as providedIn: "root"?

我已经彻底阅读了文档,虽然我找不到它的确切引用位置,但我的印象是在急切加载的模块的 providers 数组中声明服务将使单例可用适用范围。如果这是真的,

Is using @Injectable providedIn for any non-lazy-loaded module the same as providedIn: "root"?

是的,是一样的。

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

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