2016-08-03 4 views
0

Мне интересно, как вы получаете Наблюдаемое событие в Angular 2?Как вы получаете Наблюдаемое событие?

Например, я хочу подписаться на событие click, но только после двух щелчков мыши? Можно ли получить объекты событий MouseClick?

Скажем, если я хотел фильтровать button или ctrlKey - или Наблюдаемые из KeyboardEvent и фильтра, key \ keyCode - Или любой возможный сценарий будущего

Я прочитал http://blog.thoughtram.io/angular/2016/01/06/taking-advantage-of-observables-in-angular2.html но valueChanges свойство Observable<string>

Я также видел на https://github.com/angular/angular/issues/5489, что можно сделать что-то вроде:

this.clickStream = new Subject(); 
... 
<button (click)="clickStream.next($event)">Click Me</button> 

Правильно ли это метод Subject? Я не уверен.

У меня нет большого опыта работы с угловыми 2 или RxJS, но Меня интересует как и я их исследования с идеей их использования в будущих проектах

Редактировать

Вот мой Plunker с простым кликом для использования http://plnkr.co/edit/u1A7ve2fAYigjwaZ0x1v?p=preview

ответ

1

Observable имеет fromEvent operator, но для его использования вам понадобится ссылка на собственный элемент. Способ получить это - использовать viewChild/contentChild, чтобы получить элементRef.

Далее вы можете связать его щелчком так:

var clickStream = Observable.fromEvent(btnRef.nativeElement, 'click'); 

Если я понял фильтрующую вещь правильно, вы хотите, чтобы поток испускать только после щелчка была нажата два раза, или быть более точным, один раз за каждые 2 клика, чтобы сделать это, используйте bufferWithCount operator:

var triggerFor2Clicks = clickStream.bufferWithCount(2); 

Это будет испускать массив из 2 событий, в то время, так что ваш обработчик действия может быть:

triggerFor2Clicks.subscribe(() => my2ClicksHandler); 

Обратите внимание, что аргументы пусты, обозначаются как «()», так как вы не заботитесь о событиях, просто к тому, что они были из них 2.

+0

Спасибо, что помогает! Два щелчка - это пример, который коллега спросил меня о том, как изменить логику. Мне было действительно интересно узнать, можно ли получить объекты Observable of MouseClick, скажем, если я хочу фильтровать 'button' или' ctrlKey' - или Observable of KeyboardEvent' и фильтровать 'key' \' keyCode' –

+0

Я также просто видел ИСПОЛЬЗОВАНИЕ С ПРЕДОСТЕРЕЖЕНИЕМ в Angular 2 API ref для 'ElementRef' https://angular.io/docs/ts/latest/api/core/index/ElementRef-class.html –

+0

Пример фильтрации (левый указатель мыши только): Observable.fromEvent (this.elementRef.nativeElement, 'mousedown'). filter ((md: MouseEvent) => md.which == 1) Что касается предупреждения, вы правы, но все же, он работает :-) – Meir

Смежные вопросы