延迟加载和提供商策略

时间:2017-10-12 11:33:34

标签: angular ionic-framework angular-module angular-providers

现在,使用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中声明它,目的是共享相同的提供者“memory”(如果提供者包含一个值,B和C应该看到同一个对象),分别如何我会编码吗?只需通过“像往常一样”注入提供者并完成剩下的角度吗?

提前获得任何帮助,真的很感激

更新

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

https://angular.io/guide/ngmodule-faq#q-component-scoped-providers

更新2018年

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

2 个答案:

答案 0 :(得分:1)

您应该创建一个共享模块,该模块与您的提供者2相关,并且B和C模块包含其依赖项。

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

答案 1 :(得分:-1)

答案是你应该在app.module.ts中添加你的提供者,因为它是一个单例服务。这是来自angular dependency injection doc

  

依赖关系是注射器范围内的单例

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