角度服务装饰器提供了对延迟加载的根效果

时间:2018-06-07 21:09:11

标签: angular angular5 angular6

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

@Injectable({
                providedIn: 'root'
            })

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

有关提供的信息

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

1 个答案:

答案 0 :(得分:17)

是的,在这种情况下,它将只是您的延迟加载模块/块的一部分。使用SELECT时,Angular编译器会自动找出最佳方法:

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

有关更多信息,请考虑阅读documentationNgModule FAQs

顺便说一句:

  1. 如果您不希望应用程序范围内的单例,请改用提供程序的组件数组。
  2. 如果您想限制范围,以便没有其他开发人员可以在特定模块之外使用您的服务,请改为使用提供程序的NgModule数组。