我有两个服务:SharedDataService(SDS)和FilterService(FS)。 SDS处理我的API资料。它为我的用户,员工,观察购物。它还处理发送到后端的东西。 FS处理很多,但不是屏幕上发生的所有事情。通过我的互动服务,我应该(如果我可以让这个该死的东西工作)能够根据输入日期,员工,某些类别或所有或部分联合在一起的内容来筛选我的列表。服务之间的角度4通信
现在,这是我的问题。你如何得到两种服务相互交谈?我需要来自SDS(用户和观察)的FS中的一些信息。我如何让他们说话?
我已经试过:
//SharedDataService.ts
public observations: Observation[] = [];
private observationsSource = new BehaviorSubject<any>(this.observations);
observations$ = this.observationsSource.asObservable();
public getObservations(jobcode: string, loc_name: string):
Observable<Observation[]> {
return this.http
.get(API_URL + '/quick-interactions/get-observations/' + jobcode + '/' + loc_name)
.map(response => {
this.observations = response.json();
this.observations.map((observation) => new Observation(observation));
return this.observationsSource.next(this.observations);
})
.catch(this.handleError);
}
//FilterService
constructor(
private sharedDataService: SharedDataServiceService
) {
sharedDataService.employee$.subscribe(employee => {
this.employee = employee;
});
sharedDataService.observations$.subscribe(observations => {
this.observations = observations;
});
}
但是,这并不让我我需要什么。我试过它只是一个Observable而不是BehaviorSubject。我甚至尝试过直接调用shareObservations方法返回this.observations。他们都没有工作。
任何人有任何明智的想法?
你是对的,你不应该需要行为主体。一个服务应该能够使用依赖注入来访问另一个服务,就像你在上面的代码中一样。你能详细说明它是如何不工作的吗? – DeborahK
我有很多console.logs,我删除了这个问题。当应用程序加载时,我可以在其中一个中看到SDS已检索到292个观察值,但在FS中console.logs显示为“null”。所以即使安全数据单已经收到了观察结果,他们也不会与FS共享。我猜测FS在SDS完成购物之前正在运行,但即使他们是可观察的数据,数据也永远不会到达FS。 –
给我们更多的服务代码片段。顺便说一句,你有没有在你的服务类之前放置'@Injectable()'? – asmmahmud