【发布时间】:2018-08-31 17:29:29
【问题描述】:
我已经彻底阅读了文档,虽然我无法找到它的确切引用位置,但我的印象是,在热切加载模块的 providers 数组中声明服务将使单例可用于应用程序范围。如果这是真的,
是否将
@InjectableprovidedIn用于与providedIn: "root"相同的任何非延迟加载模块?
【问题讨论】:
标签: angular angular-di
我已经彻底阅读了文档,虽然我无法找到它的确切引用位置,但我的印象是,在热切加载模块的 providers 数组中声明服务将使单例可用于应用程序范围。如果这是真的,
是否将
@InjectableprovidedIn用于与providedIn: "root"相同的任何非延迟加载模块?
【问题讨论】:
标签: angular angular-di
是的,它是一样的。
一般来说,您应该始终只在@Injectable 声明中使用providedIn: "root" 语法。当它刚刚加载到一个模块中时,它甚至可以与延迟加载一起使用,因此在角度加载模块之前不会加载服务。它是一种更好的构造。
我认为首选providedIn的唯一2个例外是 1)您想在组件中声明它。这将导致它不是单例,而是作用于组件 2)您在 2 个单独的但都是延迟加载的模块中使用它(并且它也没有在初始加载中使用),在这种情况下,我相信最好的选择是通过在初始加载时将其带入 AppModule 来急切地加载它。
【讨论】: