Angular 提供的服务装饰器对延迟加载的根影响

Angular service decorator providedIn root effect on lazy loading

我想知道新的 angular 服务装饰器

@Injectable({
    providedIn: 'root'
})

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

提供的信息

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

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

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

有关更多信息,请考虑阅读 documentation and NgModule FAQs

顺便说一句:

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