何时使用角服务? [关闭]

问题描述 投票:0回答:2

据我了解,在内部和内部组件通信的情况下,我们使用服务,其中我们隐藏了多个或复杂的数据结构。我们仅在持久性数据结构的情况下才使用服务吗?那么在什么情况下我们不应该使用服务?

angular angular-services
2个回答
4
投票

我希望与您的发言有所不同。

据我了解,我们在内部和内部使用服务 组件通信,我们隐藏了多个或复杂的数据 结构。

而不是回答何时不应该使用有角度的服务?我会回答什么,为什么以及何时使用服务?

Services

服务是具有特定目的的类,在Angular中,我们主要将服务用于三个目的。

1。实施独立于任何组件的任何业务逻辑

示例 假设您要通过DOB计算年龄,现在提供年份 并且该逻辑可以使您年龄变大,您将不需要HTML视图 ,它是独立的组件

2。访问共享数据。 在缺少直接连接的组件(如兄弟姐妹,孙子等)之间传递数据时,应使用共享服务。您可以使用RXJS BehaviorSubjectBehaviorSubject进行跨组件通信。

与普通的SubjectSubject相比,使用BehaviorSubjectSubject进行跨组件交互的优势在于,您无需手动触发获取最新数据的方法。无论何时更改数据,都会自动通知所有注入服务的组件。

getters 3。外部互动 1.使用setters访问REST Web服务------------------------------------------------ -------------------------------------------------- ---------------------------------为什么在Angular中使用服务Angular将组件与服务区分开来,以提高模块化和可重用性。What is the difference between Subject and BehaviorSubject???

来自Angular Style Guide将组件中的逻辑限制为仅 视图所需的内容。所有其他逻辑应委托给 服务。

将可重用的逻辑移至服务,并使组件保持简单和 专注于其预期目的。

为什么?逻辑可以放在多个组件中时由多个组件重用 服务并通过功能公开。

为什么?可以在单元测试中更轻松地隔离服务中的逻辑, 同时可以轻松地模拟组件中的调用逻辑。

为什么?删除依赖项并从 组件。

为什么?使组件保持苗条,修剪和集中。

Angular中的服务使用也确保您没有违反软件开发的Httpand It's Good Practice to Delegate complex component logic to services原则。

and It's Good Practice to Delegate complex component logic to servicesFROM Angular Docs

您是否应该在[]中提供带有DRY装饰器的服务 SRP,还是在Providing Services内?选择导致差异 最终捆绑包的大小,服务范围和使用寿命。

[当您在提供商的Providing Services装饰器中注册提供商时 服务本身,优化工具,例如CLI所使用的工具 生产版本可以执行摇树操作,从而消除了服务 您的应用程序未使用的内容。摇树会产生较小的束 尺寸。

Angular模块提供者@Injectable已向 应用程序的根注入器。 Angular可以注入相应的 它创建的任何类中的服务。创建服务实例后, 为应用程序的生命而生存,Angular注入了这一服务 每个需要它的类中的实例。

组件的提供者@NgModule已向 每个组件实例自己的注入器。

Angular只能在该组件中注入相应的服务 实例或其后代组件实例之一。角不能 在其他任何地方注入相同的服务实例。

请注意,组件提供的服务的寿命可能有限。 组件的每个新实例都会获得其自己的实例。 服务,并且当组件实例被销毁时, 服务实例

TLDR

如果我们希望全局共享一个依赖性实例并在整个应用程序中共享@Component,我们可以在@Injectable上对其进行配置。如果我们希望在组件的每个实例之间共享一个独立的依赖项实例,并且其子级,则可以在组件的(@NgModule.providers)属性上对其进行配置。

要获得清晰的图片,请通过(@Component.providers)

嗯,建议始终向根目录AppModule注册应用程序范围内的服务,这会使服务成为单例(只要我们的应用程序有效,它就会一直有效),但这完全取决于用例。

[如果服务的唯一目的是在孩子的各个组件之间共享数据并提供几种帮助方法。

向组件提供者注册并使其成为非单个服务。

好处是,当Angular销毁组件时,Angular也会销毁服务并释放它所占用的内存。@@ state] >>

NgModule


0
投票

您在哪里听到这是不好的做法?使用服务通过HTTPRequest从API获取数据或在组件之间共享数据是一种好习惯,请在此处查看我的示例:providers

© www.soinside.com 2019 - 2024. All rights reserved.