2016-11-25 175 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