【问题标题】:Angular service decorator providedIn root effect on lazy loadingAngular 服务装饰器提供在延迟加载的根效果
【发布时间】:2019-08-11 14:06:09
【问题描述】:

我想知道新的角度服务装饰器如何

@Injectable({
    providedIn: 'root'
})

与延迟加载结合使用。这意味着如果我有一个延迟加载的模块,并在根目录中提供了一个服务,这将包括应用程序基本代码中的特定服务,也就是。应用程序根 chunks.js 或者这仍然会延迟加载服务,然后在我延迟加载该模块时使其成为全局单例。

提供的信息

https://angular.io/guide/ngmodule-faq

【问题讨论】:

  • 从应用启动时加载到内存中,并在惰性/非惰性模块在构造函数中添加时使用。
  • 我不想在应用程序启动时将单例服务加载到内存中,但是我确实想要两个不同的延迟加载模块来共享服务。提供单例服务以供两个不同的延迟加载模块使用而不在应用启动时加载的首选方式是什么?

标签: angular angular5 angular6


【解决方案1】:

是的,在这种情况下,它只是延迟加载模块/块的一部分。当使用providedIn: 'root' 时,Angular 编译器会自动找出完美的方法:

  1. 该服务将在应用程序范围内作为单例提供,无需将其添加到模块的提供程序数组中(如 Angular
  2. 如果服务仅在延迟加载的模块中使用,它将与该模块一起延迟加载
  3. 如果从未使用过,它将不会包含在构建中(摇动树)。

如需了解更多信息,请考虑阅读documentationNgModule FAQs

顺便说一句:

  1. 如果您不想要应用程序范围的单例,请改用提供程序的组件数组。
  2. 如果您想限制范围以使其他开发人员永远不会在特定模块之外使用您的服务,请改用提供者的 NgModule 数组。

【讨论】:

  • 以这种方式使用root 是一种确定的策略吗?或者我是否必须期望稍后切换到在providedIn: [lazyModule] 中提供延迟加载的模块? lazy loaded with that module,这是否意味着服务是在子注入器中提供的?
  • 始终使用 root 以防儿童
  • 嗨。感谢您的解释。您能否提供2. If the service is only used within a lazy loaded module it will be lazy loaded with that module 的报价和来源?谢谢。
  • @KarolDepka 抱歉,您必须自己查看我发布的两个链接,或者更多文档。我现在也必须这样做。
  • @KarolDepka angular.io/guide/…
猜你喜欢
  • 2016-02-28
  • 2021-07-13
  • 2017-04-02
  • 2018-03-17
  • 1970-01-01
  • 2017-07-24
  • 2018-06-19
  • 2021-11-29
  • 1970-01-01
相关资源
最近更新 更多