8

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

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

4

1 回答 1

6

是的,它是一样的。

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

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

于 2018-08-31T17:52:36.760 回答