2017-04-17 78 views
1

我想创建一个使用RX Js作为练习的边栏菜单。这是我走到这一步:使用RXJs流切换和隐藏

var hideStream = Rx.Observable 
.fromEvent(hideButton, 'click') 
.map(() => false); 

var toggleStream = Rx.Observable 
.fromEvent(toggleButton, 'click') 
.map(() => true); 

var resultStream = Rx.Observable.merge(
toggleStream, hideStream) 
.startWith(false) 
.scan(function(value, newValue) { 
    if (newValue) { 
    return !value; 
    } else { 
    return false; 
    } 
}); 

toggleStream观察到的监听汉堡包,并允许用户切换菜单的可见性。第二个可观察的hideStream必须能够隐藏菜单,而不管当前状态如何。

这是按预期工作,但我想知道是否有更好的方法。我在scan运营商确实感觉有点怪,我...

工作示例这里:https://jsbin.com/hozozolune

回答

0

这看起来相当好了给我,我们可以合并hideStream时进一步简化和之后的toggleStream我们的toggleStream设置正确:

var hideStream = Rx.Observable 
.fromEvent(hide, 'click') 
.mapTo(false); 

var toggleStream = Rx.Observable 
.fromEvent(toggle, 'click') 
.mapTo(true) 
.startWith(false) 
.scan(value => !value); 

var resultStream = Rx.Observable.merge(toggleStream, hideStream);