我有兩個服務: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