Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 你如何获得一个事件的可观察性?_Javascript_Angularjs_Rxjs - Fatal编程技术网

Javascript 你如何获得一个事件的可观察性?

Javascript 你如何获得一个事件的可观察性?,javascript,angularjs,rxjs,Javascript,Angularjs,Rxjs,我想知道你是如何在角2中观察到一个事件的 例如,我想订阅一个单击事件,但只在两次单击后发出?是否有可能获得鼠标单击事件对象的可观察性 假设我想通过按钮或ctrlKey-或键盘事件的观察值进行过滤,并通过键\键-或任何可能的未来场景进行过滤 我已阅读,但valueChanges属性是可观察的 我还看到,可以采取以下措施: this.clickStream = new Subject(); ... <button (click)="clickStream.next($event)">Cl

我想知道你是如何在角2中观察到一个事件的

例如,我想订阅一个单击事件,但只在两次单击后发出?是否有可能获得
鼠标单击
事件对象的可观察性

假设我想通过
按钮
ctrlKey
-或
键盘事件
的观察值进行过滤,并通过
\
-或任何可能的未来场景进行过滤

我已阅读,但
valueChanges
属性是
可观察的

我还看到,可以采取以下措施:

this.clickStream = new Subject();
...
<button (click)="clickStream.next($event)">Click Me</button>
this.clickStream=新主题();
...
点击我
上述
Subject
方法是否正确?我不确定

我对Angular 2或RxJS没有太多经验,但我对两者都感兴趣,并正在研究它们,希望在未来的项目中使用它们

编辑

这是我的Plunker,它有一个简单的点击用例,Observable有一个,但是要使用它,你需要一个对本机元素的引用。获取它的方法是使用viewChild/contentChild获取elementRef

下一步,您可以绑定到其“单击”,如下所示:

var clickStream = Observable.fromEvent(btnRef.nativeElement, 'click');
如果我正确理解了过滤功能,您希望流仅在按下两次单击后才发出,或者更准确地说,每两次单击一次,要执行此操作,请使用:

这将一次发出2个事件的数组,因此您的操作处理程序可以是:

triggerFor2Clicks.subscribe(() => my2ClicksHandler);

请注意,参数是空的,标记为“()”,因为您并不真正关心事件,只是因为它们是其中的两个。

非常感谢!两次点击就是一个例子,一位同事问我如何改变逻辑。我真的想知道是否有可能观测到MouseClick事件对象,假设我想通过
按钮
ctrlKey
-或
键盘事件
的可观察项进行过滤,并通过
\
进行过滤,我刚才还看到了对
ElementRef
的Angular 2 API ref的谨慎使用过滤示例(仅鼠标左键向下):Observable.fromEvent(this.elementRef.nativeElement,'mousedown').filter((md:MouseEvent)=>md.which==1)至于警告,您是正确的,但仍然有效:-)您认为您可以帮我做一个小演示吗?我试图编辑Plunker上的Angular 2示例,但我得到了异常“bufferWithCount不是函数”,我一定是导入了错误的东西,在RxJS的最新版本5中是
.bufferWithCount()
?我刚刚将我的Plunker示例更改为使用版本4,并且不再抛出异常
triggerFor2Clicks.subscribe(() => my2ClicksHandler);