2016-11-25 177 views
2

我正在用RxJs在Angular2中开发一个组件。这是我对RxJs的第一步,我正在讨论如何使用RxJs的优点和常量。订阅/取消订阅VS Create/TakeUntil?

该组件基于一个文本框。当文本框是被动的,失焦时,文本框显示信息。当用户点击它时,焦点位于文本框上,在其下面出现一个工具提示,当用户正在编辑文本时显示信息。

在每个KeyUp上,处理文本框的值并验证多个业务规则,然后更新弹出窗口以向用户提供反馈。

验证是作为debounceTime和distinctUntilChanged的keyup上的observable订阅处理的。

有两个事件可用:“开始编辑”,当用户点击文本框和“结束编辑”时,当用户按下ENTER,ESCAPE,TAB或单击不在控件上。

考虑到网页上会有20多种此类控件,管理keyUp订阅的最佳实践是什么?例子:

  1. 每次“开始编辑”被触发,创建KEYUP订阅,像Observable.fromEvent(“KEYUP”),并与“结束编辑”事件作为一个参数添加操作“takeUntil”?
  2. 保持可观察的某个地方,每次“开始编辑”被触发,订阅它来处理输入,当“结束编辑”发生时,取消订阅它?
  3. A或B之间无显着差异
  4. 其他建议?

谢谢! 塞巴斯蒂安

+0

代码胜过千言万语。 – estus

回答

0

我会做这样的事情:

onKeyUpObservable 
    .window(
     startEditingObservable, 
     function() { return endEditingObservable; } 
    ) 
    .subscribe(keyUpEvent => { 
     // Here you will get key up events that happen between 
     // start editing and end editing... 
    }); 

你可以阅读更多的window操作here