在'root','platform','any'中不提供,在Angular中应优先选择哪一种?

问题描述 投票:-2回答:1

出于'root','platform','any'w.r.t提供,在Angular中哪种情况下应首选?

https://angular.io/api/core/Injectable

'root':大多数应用程序中的应用程序级注入器。 'platform':特殊的单例平台注入器,由 页。 'any':在每个模块(包括 惰性模块)来注入令牌。

在哪种情况下,我们希望每个模块中都有唯一的实例,而不是让根处理所有实例?

平台的示例用例是什么?

angular typescript
1个回答
0
投票

因此,虽然不确定我是否可以针对任何特定用例定制此答案,但我对新选项的初步印象是,它们在除开发人员未正确使用Angular的极端情况下没有什么用处之外。基于对包括this onethis one在内的一些文章的快速阅读,看来新选项为开发人员提供了更多的灵活性,使其可以错误地设计其应用程序并引入奇怪且难以跟踪的错误。

Angular的DI框架允许您定义服务范围(请记住services are where your application's state lives)。选项'root'声明将为整个应用程序创建服务的一个实例,因此整个应用程序将共享服务所拥有的任何状态。另一种选择是在providedIn选择中指定特定的模块,或更常见的是在模块声明的provides:部分中指定。在这种情况下,您要么需要通过导入模块来导入服务,要么需要显式声明它包含在一个模块中。

使用旧方法的关键是,如果将其弄乱了,则在运行时会得到易于跟踪的错误。

新方法允许您指定更多的歧义。 'any'表示它的意思-每个需要特定服务的模块都会生成自己的模块。几乎可以肯定,这将使不熟悉其程序中状态不一致症状的入门级和中级开发人员绊倒。相反,'platform'将允许多个应用程序加载到同一窗口中(这是否包括不同iFrame中的应用程序?)共享同一状态。最好情况下,此选项是不必要的(除非您正在谈论Angular Elements,否则一次只能加载一个Angular应用程序),最坏的情况是,它有使应用程序难以测试或无法测试的风险。 >

底线:

除非您在体系结构过程中犯了一个非常大的错误,或者正在编写某种类型的库,否则您不应该使用这些新选择。
© www.soinside.com 2019 - 2024. All rights reserved.