Flo*_*rca 6 service dependency-injection angular-services angular-components angular
因此,我有一个组件“motions”,它在通过一些用户输入单击按钮后执行MotionService 。然后,该服务需要根据输入将数据传递给 DebateComponent 的特定 CaucusService实例(我们将其称为服务 A)或 DiscussComponent 的 CaucusService 实例 B。
但是,到目前为止,我似乎在 MotionService 中有一个 CaucusService 的新实例。DebateComponent 和 DiscussComponent 需要 CaucusService 的不同实例,因此我在每个 @Component 中提供了它
基本上,我的 MotionService 需要在给定特定用户输入的情况下将数据传递给 A 或 B 我应该如何解决这个问题?
您可以通过两种方式指定服务的确切实例:
只需将该providedIn: 'root'语句添加到服务的声明中即可确保该服务只有 1 个实例,这意味着您在任何地方使用它都将是同一个实例。
@Injectable({
providedIn: 'root'
})
export class CaucusService {}
Run Code Online (Sandbox Code Playgroud)
这有点复杂,但允许存在多个实例并在需要时引用。角度文档中有有关如何执行此操作的信息。
处理无状态服务比处理包含某种状态的服务容易得多。因此,尝试从组件传递状态,这也将使您可以更轻松地测试服务。
小智 3
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);
}
}
Run Code Online (Sandbox Code Playgroud)
尝试用这种方式