Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Angular中的另一个服务调用服务的特定实例?_Angular_Dependency Injection_Service_Angular Services_Angular Components - Fatal编程技术网

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

如何从Angular中的另一个服务调用服务的特定实例?,angular,dependency-injection,service,angular-services,angular-components,Angular,Dependency Injection,Service,Angular Services,Angular Components,因此,我有一个组件“motions”,它在用一些用户输入单击按钮后执行MotionService。然后,此服务需要根据输入将数据传递给debateComponent的特定CaucusService实例(我们称之为服务A)或DiscuseComponent的CaucusService实例B 然而,似乎到目前为止,我在MotionService中有一个新的CaucusService实例。 debateComponent和DiscussComponent需要CaucusService的不同实例,所以我

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

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

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

创建用于组件级使用的分离服务,该服务只包含组件日期

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

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);
    }
}

通过这种方式尝试

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

简单-让它成为一个单身服务 只需在服务声明中添加“'root'语句”中提供的
,即可确保该服务只有一个实例,这意味着您使用它的任何地方都是同一个实例

@可注入({
providedIn:'根'
})
导出类CaucusService{}
硬使用注入令牌 这有点复杂,但允许存在多个实例并在需要时引用。在angular文档中有关于如何执行此操作的信息

一般意见
与处理包含某种状态的服务相比,处理无状态服务要容易得多。因此,请尝试从组件中传递状态,这也将使您能够更轻松地测试服务。

但是,如果您使用“新”操作符,则无法获得依赖注入的好处是,但是如果FirstService中的字段或方法没有更改,那么最简单的解决方案就是这样。或者,如文档所示,您可以删除“{providedIn:'root'}并将服务导入app.module并添加到providers数组。您能否提供一个stackblitz来说明您的问题?