私は角度コンポーネントで観測可能なRxjsと学習しています。私はいくつかのイベントに基づいてコンポーネントからサービスにデータを渡す必要があるシナリオを持っています。サービス上Observable in Service Angleのサブスクリプションが動作していません
Price.service.ts
export class PriceService{
private priceUpdate: BehaviorSubject<Object> = new BehaviorSubject({});
private oldPriceUpdate: BehaviorSubject<Object> = new BehaviorSubject({});
getPriceUpdate(){
return this.priceUpdate.asObservable();
}
getOldPrice(){
return this.oldPriceUpdate.asObservable();
}
}
価格更新を取得するためのコンポーネントで使用されています。
Price.component.ts
@Component({
selector: 'price',
templateUrl: 'price.component.html',
styleUrls: ['price.component.css']
})
export class PriceComponent{
updateIndicator: BehaviorSubject<Object> = new BehaviorSubject({});
constructor(private priceService:PriceService, private techIndicator:TechnicalIndicatorService){
this.techIndicator.subscribeUpdateIndicator(this.updateIndicator.asObservable());
this.priceService.getPriceUpdate().subscribe(
(newPrice:any) => {
this.updatePrice(newPrice);
}
)
this.priceService.getOldPriceUpdate().subscribe(
(oldPrice:any) => {
//some business logic
this.updateIndicator.next({{data: data, ....});
});
}
private updatePrice(newPrice:any){
//.... some business logic....
this.updateIndicator.next({data: data, ....});
}
}
コンポーネントにPriceServiceから新価格を取得した後、私はいくつかの技術的な研究をやっている他のサービスを提供しています。私はサービスにデータを渡す必要があります。そのために、私はコンポーネントの動作の件名を使用しており、サービスはそれを購読しています。 (コンポーネントが購読している通常の方法とは異なります)
私はその観測方法を有効に使う方法を教えてください。
TechnicalIndicator.service.ts
export class TechnicalIndicatorService{
subscribeUpdateIndicator(updateIndicator:Observable<Object>){
updateIndicator.subscribe(
(obj:any) => {
// some logic
});
}
}
サブスクリプションがTechnicalIndicatorServiceに一度だけ働いているが。その後のデータ更新では、そのサブスクリプションがトリガーされません。 ここで私が紛失していることを教えてください。
なぜあなたはあなたのサービスに観測物を渡しますか?インジケータを更新する必要があるたびに、サービスのメソッドを直接呼び出してみませんか?通常、コンポーネントのインスタンスがいくつかあります。TradeComponentが作成されるたびに、新しいオブザーバブルが作成され、それがサービスに渡されます。 –
コンポーネントの '@ Component'アノテーションを含めることができますか? – echonax
編集したコードをご覧ください。コンポーネントクラスの2つのサブスクリプション、priceUpdate&oldPriceUpdateがあります。どちらもデータをサービスに渡し、サービスではデータが同期している必要があります(私が配列を更新するために使用しています)。いくつかのケースでは、物事が期待どおりに機能していなかった。メソッドを直接呼び出す代わりに、オブザーバブルを使用してデータを渡すことを考えました。 –