angular - 如何从Angular中的另一个服务调用服务的特定实例?
问题描述
所以我有一个组件“动作”,它在使用一些用户输入单击按钮后执行MotionService 。然后,此服务需要根据输入将数据传递给辩论组件的特定 CaucusService实例(我们称之为服务 A)或 DiscussComponent 的 CaucusService 实例 B。
但是,到目前为止,我似乎在 MotionService 中有一个新的 CaucusService 实例。辩论组件和讨论组件需要不同的 CaucusService 实例,所以我在每个 @Component 中都提供了它
基本上,我的 MotionService 需要在给定特定用户输入的情况下将数据传递给 A 或 B 我应该如何解决这个问题?
解决方案
您可以通过 2 种方式指定服务的确切实例:
简单 - 使其成为单例服务
只需将providedIn: 'root'
语句添加到服务的声明中即可确保该服务只有 1 个实例,这意味着您使用它的任何地方都是同一个实例。
@Injectable({
providedIn: 'root'
})
export class CaucusService {}
Hard - 使用注入令牌
这有点复杂,但允许多个实例存在并在需要时被引用。角度文档中有关于如何执行此操作的信息。
- https://angular.io/guide/dependency-injection-in-action
- https://angular.io/guide/dependency-injection-providers#non-class-dependencies
- https://angular.io/guide/dependency-injection#dependency-injection-tokens
一般建议
处理无状态服务比处理包含某种状态的服务要容易得多。因此,尝试从组件中传递状态,这将使您也可以更轻松地测试服务。
推荐阅读
- reporting-services - SSRS - 按周分组
- javascript - 为什么这个 xss 脚本不调用我的服务器?
- asp.net - 使用带有 VB.Net 的 Asp.Net 中的响应对象下载 excel (.xls) 时丢失了一些数据
- java - 在 URL 中定义名称为“repositorySearchController”的 bean 创建错误
- javascript - 将 JSON 的分支/节点提取为新的 JSON
- spring-boot - 如何从 log4j2-spring.xml 读取外部 application.properties 的属性?
- sql - 基于 SQL Server 中的组获取行值作为列
- regex - 根据标签中的值从日志中提取多行 XML
- c++ - C++ 中的分页(控制台)
- delphi - 使用变量作为变体不起作用