Observable
を別のObservable
の入力でフィルタリングしています。フィルタリングの入力はユーザーからのものです。ObservableからstartWithを使用してObservableを作成する
フィルタリングは、RxJS演算子combineLatest
で行われます。これは、このストリームを購読するときに、両方のソースオブザーバブルからのエミッションが発生するまで値が出力されないことを意味します。ユーザー入力が行われる前に、作成されたストリームが作成時に(フィルタリングなしで)
startWith
演算子を使用する必要があると思いますので、ストリームには生成時にエミッションがありますが、Observableからこれをシードする仕組みはできません。 Observableを使用するのはFirebaseからのデータで、FirebaseListObservable
で処理されるためです。
以下は、私が現在やっていることをまとめたものです。
let tagInput = document.getElementById('tags');
let tagExclusionStream = Observable
.fromEvent(tagInput, 'input')
.map((e: any) => createsArrayFromInput(e.target.value));
let allTags: Observable<any[]> = getAllTags();
let filteredTags = allTags
.combineLatest(tagExclusionStream, (tags, tagExclusions) => {
return tags.filter((tag: any) => tagExclusions.indexOf(tag.$key) == -1)
});
// I want this to print out without needing the tagExclusionStream to emit first
filteredTags.subscribe(tags => console.log("Tags:", tags))
/ここに私のアプローチは完全にオフになっているなら、私に知らせて、私はRxJSに新たなんだと、より良い方法がありますしてください。ストリーム上の放射を作成する - 私は、このアプローチが好き
let tagExclusionStream = Observable
.fromEvent(tagInput, 'input')
.map((e: any) => createsArrayFromInput(e.target.value))
.startWith('');
:あなたはこれを行うことができます別の場所で
tagExclusionStream
を使用している場合、代わりに: –