私は検索のためのフォーム入力を持っています。ユーザーが検索入力に何かを入力すると、2つの別々のAPIを呼び出す必要があります。これは私が達成しようとしているものです:Angular2オブザーブブルは共有する必要があります
myInput: new FormControl();
listOne: Observable<string[]>;
listTwo: Observable<string[]>;
ngOnInit(){
this.listOne = this.myInput.valueChanges
.debounceTime(500)
.distinctUntilChanged()
.switchMap(myInput => this._service.getListOne(myInput));
this.listTwo = this.myInput.valueChanges
.debounceTime(500)
.distinctUntilChanged()
.switchMap(myInput => this._service.getListTwo(myInput));
}
だから私の質問は、どのように私はvalueChangesに加入し、2つの異なる配列を埋めるために2つの異なるAPIを呼び出すのですか?上記のコードでは、最初の検索でうまくいきますが、検索テキストを変更すると、getListTwoだけが呼び出されます。ソースは、いくつかの加入者を持っており、あなたがそれらの加入者(つまりあなたがマルチキャスト複数の加入者にソース値にしたい)そのソースから同じ値を読みたいときはいつでも
はどのようにして、観察から退会するのでしょうか?私はsharedSourceまたはlistOne/listTwoから退会する必要がありますか?私は購読と呼んでいないので、購読中止のように見えます。 – garethb
まあ、サブスクリプションはどこかで呼び出されます。そうでなければ、それはフレームワークです。つまり、フレームワークもサブスクライブを中止します。そのサブスクライブが呼び出されると、上位ストリームもサブスクライブ解除されます。だからこそ、あなたは何もする必要はありません。 – user3743222
正しいです、Angular2を使用し、ng-forのasyncパイプは、フレームワーク内で観測可能で購読/取消しを受け取ります。例えばng-for = "let x of listOne | async" <=これはsubscribe/unsubscribesです – garethb