代码之家  ›  专栏  ›  技术社区  ›  Karl Johan Vallner

在根目录中提供的角服务装饰器对延迟加载的影响

  •  13
  • Karl Johan Vallner  · 技术社区  · 8 年前

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

    @Injectable({
        providedIn: 'root'
    })
    

    与延迟加载结合使用。这意味着,如果我有一个延迟加载的模块,其中的服务是在根目录下提供的,那么这将包括应用程序基代码中的特定服务,即aka。应用程序root chunks.js还是会延迟加载服务,稍后当我延迟加载该模块时,它将成为一个全局单例。

    提供的信息

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

    1 回复  |  直到 6 年前
        1
  •  21
  •   Mick    7 年前

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

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

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

    顺便说一句:

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