2017-05-07 63 views
0

我想通过加入用户输入的键直到她遇到空间或输入时显示标记(单词)。在JS中看起来微不足道,但在rxJs中,我一直在尝试很多方法并卡住了!阅读按空格分隔的“keydown”输入

开始与此请:

const source = Rx.Observable.fromEvent(someDiv, 'keydown') 
//.YOUR_SOL 
.subscribe(w=>{console.log(w)}) 

例如: 'A', 'B', 'C',SPACE, 'A', 'B'=> “ABC”, “AB”

非常感谢!

+0

你能给输入和预期行为的一个例子? 如果用户点击'a','b','c',空格,'a','b',预期的输出是什么? – ZahiC

+0

'a','b','c',空格,'a','b'=> abc,ab – Muchtar

回答

0

试试这个:

const keyDown$ = Rx.Observable.fromEvent(document, 'keydown').pluck('key'); 

const isSpaceOrEnter = x => [' ', 'Enter'].includes(x); 

const spaceOrEnter$ = keyDown$.filter(isSpaceOrEnter); 

keyDown$ 
    .filter(x => !isSpaceOrEnter(x)) 
    .buffer(spaceOrEnter$) 
    .map(x => x.join("")) 
    .subscribe(x => console.log(x)); 

你可以在这里进行测试:https://jsfiddle.net/abwtf2xu/1/

+0

完美!谢谢!现在,如果我需要对按下的每个按键作出反应。 .filter(x =>!isSpaceOrEnter(x))后,我有当前字符不是空格或输入。 – Muchtar