首页 > 解决方案 > Angular 服务装饰器提供在延迟加载的根效果

问题描述

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

@Injectable({
    providedIn: 'root'
})

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

提供的信息

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

标签: angularangular5angular6

解决方案


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

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

有关更多信息,请考虑阅读文档NgModule 常见问题解答

顺便提一句:

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

推荐阅读