1
我正在篩選Observable
,輸入另一個Observable
- 用於篩選的輸入來自用戶。使用來自Observable的startWith創建Observable
過濾使用RxJS操作符combineLatest
完成。使用這意味着,當訂閱這個流時,沒有值被髮射,直到從兩個源Observable發出 - 我希望創建的流在創建時發出(沒有任何過濾),在任何用戶輸入發生之前。
我想我應該使用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一種更好的方式。
我喜歡這種方法 - 建立在流上的發射直到有用戶輸入纔會發射。這工作,所以謝謝你指出這一點!爲了避免TypeScript錯誤,我必須將「startWith」的參數更改爲「」。我也改變了參數''''''''''這就是我的'tagExclusionStream'發出的。 –