懒惰加载和提供者策略



现在,使用Angular v5,同时使用延迟加载,我在app.module.ts中加载所有提供程序,我想这可能不是最好的策略,因为这不会加快我的应用程序启动时间,特别是因为我有大约50个自定义提供程序(不要评判我;))。

因此,我在问自己,我是否真的应该为我的所有应用程序加载所有它们,或者我是否应该只在我只使用它们的地方加载它们?

我想最好只在我真正使用的地方加载提供程序。

但在这种情况下,我根本不清楚如何解决以下结构:

假设我有三个页面(A、B和C),它们有自己的模块和三个提供者(1、2和3)。

A use 1
B use 1, 2, 3
C use 1, 2
  • 我想,由于1在所有应用程序中都使用,我必须在app.module.ts中声明它

  • 由于3只在B页中使用,我想我只能在B.module.ts中声明它

  • 但是2呢?我如何在B.module.tsC.module.ts中分别声明它,以共享同一个提供程序"内存"(如果提供程序包含一个值,B和C都应该看到同一个对象),我将如何对其进行编码?简单地通过注入提供者"像往常一样"和angular做其余的事情?

Thx如有任何帮助,将不胜感激

更新

不确定我是否正确理解有角度的文档,但这就是目标,应该为所有应用程序加载提供商,对吗?

参见

https://angular.io/guide/ngmodule-faq#q-组件范围的提供商

更新2018

注入策略随着Angular v6的引入而发展。根据文档,providedIn可以指定服务应该在哪个模块中使用。看见https://angular.io/guide/dependency-injection

您应该创建一个共享模块来管理您的提供者2,并且B和C模块包含它们的依赖关系。

编辑:您不需要导出提供程序。

答案是您应该在app.module.ts中添加您的提供者,因为它是一个单例服务。这是来自角度依赖注入文档:

依赖项是注入器范围内的单态

这意味着当你在app.module.ts中声明你的提供者时,它将在整个应用程序中是单例的,并且它注入的每个模块都将共享它的同一个实例。
当你在单独的模块(即B.module.tsC.module.ts)中声明提供者时,你的B page将使用提供者的一个实例,C page将使用另一个提供者的实例。这不是提供者的目的。

相关内容

  • 没有找到相关文章

最新更新