现在,使用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.ts
和C.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.ts
和C.module.ts
)中声明提供者时,你的B page
将使用提供者的一个实例,C page
将使用另一个提供者的实例。这不是提供者的目的。