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

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

所以我有一个组件 "motions",它可以执行一个 运动服务 在用户输入的某个按钮被点击后。那么这个服务需要将数据传递给 具体的CaucusService 的实例(让我们称它为服务A)或DiscussComponent的CaucusService实例B,这取决于输入。 然而,到目前为止,似乎我在MotionService.debianComponent和DiscussComponent中的CaucusService新实例需要不同的CaucusService实例,所以我在每个@Component中都提供了该实例

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

angular dependency-injection service angular-services angular-components
1个回答
2
投票
import { Injectable, Injector } from '@angular/core';
import { FirstService } from './first.service';

@Injectable({
    providedIn: 'root'
})

export class SecondService {

    static firstService = new FirstService();

    getFieldFromFirst() {
        const field = SortingService.fileService.getField();
        console.log(field);
    }
}

通过这种方式尝试


1
投票

你可以用两种方式指定服务的确切实例。

简单--把它变成一个单人服务

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

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

硬 - 使用注入令牌

这有点复杂,但允许多个实例存在并在需要的地方被引用。关于如何做到这一点,在angular文档中有相关信息。

一般性建议

处理起来就容易多了 无国籍服务 比处理包含某种状态的服务要容易得多。所以,尝试从组件中传递状态,这将使你更容易测试服务。


0
投票

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

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

即模块级的A和B服务,用于服务A1和B1组件级服务之间的共享,其中包含组件的具体数据。

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