首页 > 解决方案 > 如何从Angular中的另一个服务调用服务的特定实例?

问题描述

所以我有一个组件“动作”,它在使用一些用户输入单击按钮后执行MotionService 。然后,此服务需要根据输入将数据传递给辩论组件的特定 CaucusService实例(我们称之为服务 A)或 DiscussComponent 的 CaucusService 实例 B。
但是,到目前为止,我似乎在 MotionService 中有一个新的 CaucusService 实例。辩论组件和讨论组件需要不同的 CaucusService 实例,所以我在每个 @Component 中都提供了它

基本上,我的 MotionService 需要在给定特定用户输入的情况下将数据传递给 A 或 B 我应该如何解决这个问题?

标签: angulardependency-injectionserviceangular-servicesangular-components

解决方案


您可以通过 2 种方式指定服务的确切实例:

简单 - 使其成为单例服务

只需将providedIn: 'root'语句添加到服务的声明中即可确保该服务只有 1 个实例,这意味着您使用它的任何地方都是同一个实例。

@Injectable({
    providedIn: 'root'
})
export class CaucusService {}

Hard - 使用注入令牌

这有点复杂,但允许多个实例存在并在需要时被引用。角度文档中有关于如何执行此操作的信息。

一般建议

处理无状态服务比处理包含某种状态的服务要容易得多。因此,尝试从组件中传递状态,这将使您也可以更轻松地测试服务。


推荐阅读