如何从Angular中的另一个服务调用服务的特定实例?
因此,我有一个组件“motions”,它在用一些用户输入单击按钮后执行MotionService。然后,此服务需要根据输入将数据传递给debateComponent的特定CaucusService实例(我们称之为服务A)或DiscuseComponent的CaucusService实例B如何从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的不同实例,所以我
然而,似乎到目前为止,我在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来说明您的问题?