1
wly19960911 OP 其实我的场景是 筛选出事件冒泡中更为重要的事件,比如 select 组件,open 的时候需要点击 document (或者 backdrop )的时候关闭,问题是原有的组件逻辑里面没用 backdrop,这就可以操作其他的组件,如果这个时候如果为了阻止 document 的事件触发只能用过滤或者阻止事件冒泡。
因为原有组件逻辑问题我需要选择前者,但是过滤的时候我希望不是走过滤 document 而是收集所有被触发的事件来筛选更重要的事件.... |
2
wly19960911 OP 结贴了,感觉我思路出问题了,这个过滤不应该交给中间的流来处理,我在 source 用局部变量控制下,过滤掉其他的事件就好...想法完全歪了
|
3
ookkxw 2019-06-11 11:33:09 +08:00 via iPhone
感觉你思路有问题吧,你这样设计把订阅方式变成了观察者方式,那还不如所有事件斗在一个队列里面处理,类似 react 盒合成事件
|
4
wly19960911 OP @ookkxw #3 嗯,想了下是思路的问题,我最后决定改成 filter 过滤,在执行不同事件的时候 tap 改变局部变量的值。这个时候就得开 filter 来过滤最重要的事件。
let eventActionType; // action type merge( fromEvent(A).pipe( tap(() => eventActionType = A), ), fromEvent(B).pipe( filter(() => ....) // 根据 eventActionType 过滤 tap(() => eventActionType = B), ) fromEvent(C).pipe( filter(() => ....) // 根据 eventActionType 过滤 tap(() => eventActionType = C), ) ).pipe( tap(() => eventActionType = null), ) |