如何从Angular中的另一个服务调用服务的特定实例?

时间:2020-04-27 21:09:16

标签: angular dependency-injection service angular-services angular-components

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

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

3 个答案:

答案 0 :(得分:1)

paths/exclude

以这种方式尝试

答案 1 :(得分:1)

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

简单-使其成为单例服务

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

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

硬-使用注入令牌

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

一般建议

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

答案 2 :(得分:0)

方法应该是这样的 在模块级别为要在组件之间共享的数据创建服务实例。

为组件级使用创建单独的服务,其中仅包含组件日期

即模块级别的A和B服务,用于服务之间的共享 包含组件特定数据的A1和B1组件级服务。