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

Kar*_*ner 18 angular angular5 angular6

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

@Injectable({
    providedIn: 'root'
})
Run Code Online (Sandbox Code Playgroud)

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

有关提供的信息

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

Mic*_*ick 25

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

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

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

BTW:

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

  • 始终使用root可以防止儿童进入 (3认同)
  • 你好。感谢您的解释。你能给出“2.”的引用和来源吗?如果该服务仅在延迟加载的模块中使用,它将随该模块一起延迟加载`?谢谢。 (3认同)
  • 以这种方式使用“ root”是否是一种确定的策略?还是我希望以后再切换到在`providedIn:[lazyModule]`中提供延迟加载的模块?通过“懒惰地加载该模块”,是否意味着该服务是在子注入器中提供的? (2认同)
  • @KarolDepka https://angular.io/guide/ngmodule-faq#should-i-add-other-providers-to-a-module-or-a-component (2认同)