私にはSharedDataService(SDS)とFilterService(FS)という2つのサービスがあります。 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;
});
}
をしかし、それは私が必要なものを私に取得していません。私はBehaviorSubjectの代わりにObservableとして試しました。私はthis.observationsを返すshareObservationsメソッドへの単なる呼び出しとして試してみました。彼らの誰も働いていない。
誰もが明るいアイデアを持っていますか?
あなたはそうではありません行動主題が必要です。上記のコードでは、依存関係注入を使用して別のサービスにアクセスできるはずです。どのように動作していないのか詳しく説明できますか? – DeborahK
私は質問のために削除したconsole.logsのトンを持っています。アプリケーションが読み込まれると、SDSが292の観測値を取得したことがわかりますが、FSではconsole.logsに "null"と表示されます。したがって、SDSは観測を受けていますが、彼らはFSと共有されていません。 SDSが買物を終える前にFSが稼動していると思われますが、観測可能なものであってもデータがFSに到達することはありません。 –
サービスコードスニペットをさらに教えてください。ところで、サービスクラスの直前に '@Injectable()'を配置しましたか? – asmmahmud