2016-11-21 50 views
1

空如何構建一個可觀察的選擇,如果沒有選中的項與選定= true或空返回無論是當前的項目?獲取給定項目</p> <pre><code>items = [ {id: 1, selected: false}, {id: 2, selected: false} ] </code></pre> <p>的列表中選擇當前所選項目或項目列表

首先嚐試:初始加載並且在選擇項目

items 
.flatMap(item => item) 
.filter(item => item.selected) 
.startWith(null) 

工作正常。但只要所有項目都再次取消選中,它將不會發出null - 這是合理的,因爲filter()運算符不會通過。我在這裏缺少的是能夠將'null'設置爲在這種情況下將會發射的後備默認值。

用默認值「空」 第二次嘗試,首先使用():

items 
.flatMap(item => item) 
.first(item => item.selected, null) 

這也適用於初始加載不錯,但它不會對任何後續的更改事件中執行。據我的理解,這是因爲first()完成初始運行後的流。

決賽(工作)嘗試

items 
.map((items) => { 
    selectedItems = items.filter(item => item.selected); 
    return selectedItems.length ? selectedItems : [null] 
}) 
.flatMap(item => item) 

這做什麼,我需要的,但我不知道是否有另一種方式來表達只用rxjs運營商這個邏輯是什麼?

回答

0

您正在尋找可發出當前狀態(或切換)的scan操作員。看到這jsfiddle幾乎做你想要的(根據狀態和返回當前狀態篩選項目)https://jsfiddle.net/crunchie84/n1x06016/6/

+0

感謝您的示例馬克。我明白瞭如何使用'scan'來實現這一點。 –

相關問題