私にはたくさんのパターンがあり、私はそれを解決する最良の方法は何ではありません。スープの購読を避けるにはどうすればいいですか?
私に値を与える観測可能な(ここではルータへの)サブスクリプションがあります。別の観測可能性を得るために別のリクエストを作成するには、これらの値の1つが必要です。しかし、私はサブスクリプションで観察可能なものを持っています。
私はこれが良いパターンではないことを知っていますが、これを他にどのように行うべきかわかりません。
また、この2番目の観測値を使用して別の値を取得し、観測可能な観測可能な別の観測値を取得するとします。
これを解決してスープを避けるには?ここで
は私のコードです:
deal.component.ts
import {Component, OnInit, ChangeDetectionStrategy} from '@angular/core';
import {Observable} from "rxjs/Observable";
import {ActivatedRoute} from "@angular/router";
import {DealsService} from "../deals.service";
@Component({
templateUrl: './+deal.component.html',
styleUrls: ['./+deal.component.scss']
})
export class DealRouterComponent implements OnInit {
deal$: Observable<any>;
public dealId:string;
private sub:any;
constructor(
private route: ActivatedRoute,
private dealsService: DealsService) {}
ngOnInit() {
this.sub = this.route.params
.subscribe(params => {
this.dealId = params['id'];
this.deal$ = this.dealsService.getDeal(this.dealId);
})
}
ngOnDestroy() {
this.sub.unsubscribe();
}
}
deal.service.ts
import {Injectable, Inject} from "@angular/core";
import {Observable} from "rxjs/Observable";
import {AngularFireDatabase} from "angularfire2";
@Injectable()
export class DealsService {
constructor(private db: AngularFireDatabase) {}
getDeal(id) {
return this.db.object('deals/' + id);
}
}
deal.component.html
{{deal | async | json}}
このパターンはネストされた「約束地獄」に似ています。解決策は、mergeMap(flatMap)演算子でオブザーバブルを連鎖させることです。 – estus