现在,使用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
中声明它,目的是共享相同的提供者“memory”(如果提供者包含一个值,B和C应该看到同一个对象),分别如何我会编码吗?只需通过“像往常一样”注入提供者并完成剩下的角度吗?
提前获得任何帮助,真的很感激
更新
我不确定我是否正确理解角度文档,但这是目标,应该为所有应用程序加载提供程序吗?
见
https://angular.io/guide/ngmodule-faq#q-component-scoped-providers
更新2018年
注射策略随着Angular v6的引入而发展。根据文档,providedIn
可以指定服务应该在哪个模块中使用。见https://angular.io/guide/dependency-injection
答案 0 :(得分:1)
您应该创建一个共享模块,该模块与您的提供者2相关,并且B和C模块包含其依赖项。
编辑:您不需要导出提供商。
答案 1 :(得分:-1)
答案是你应该在app.module.ts
中添加你的提供者,因为它是一个单例服务。这是来自angular dependency injection doc:
依赖关系是注射器范围内的单例
这意味着当您在app.module.ts
中声明您的提供程序时,它将在整个应用程序中单独使用,并且每个注入的模块将共享它的相同实例。
当您在单独的模块B.module.ts
和C.module.ts
中声明您的提供商时,您的B page
将使用提供商的实例,C page
将使用另一个< / strong>提供者的实例。它不是提供者的目的。