![]() | 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), ) |