Handle Click Events with Subjects

John Lindquist
InstructorJohn Lindquist

Share this video with your friends

Send Tweet
Published 6 years ago
Updated 3 years ago

While Angular usually uses event handlers to manage events and RxJS typically uses Observable.fromEvent, a good practice when using Angular and RxJS combined is to use Subjects and push the value through each event so that you can use it as part of your stream.

[00:00] To add a button to control our clock, I'll go ahead and create a button. I'll just say, "update." Typically, what you do in Angular 2 is say, "click" and then just give that a handler on click. Here, you'd create that on click handler.

[00:15] Or from the other side, typically, what you do in our XJS is you'd say, "observable from event." Find the element, and then pass in the event name you want to listen to.

[00:30] We have these two different conflicting approaches where we want to find an event, or we want to handle a click here. The way we're going to solve this for now is I'm going to delete this event handler. I'm going to delete this from event.

[00:42] What I'm going to do is create something called a subject, which I'll call "click." This will be a new subject. I need to import subject. What this subject will allow me to do is call next every time I click.

[00:59] What next is going to do is push the stream forward one tick. If I take out all of this clock stuff, which was just going every second before. Now I say this.clock is this.click.

[01:13] I'm going to map those clicks to a new date. Hit save. I refresh over here. I'll click update. You can see we get our clock frozen in time at 44 seconds. I'll click update again. You can see that six seconds have passed.

Mike thompson
Mike thompson
~ 6 years ago

Slight aside here, but I noticed you experienced the same issue I was having with WebStorm auto-importing with double quotes instead of single quotes. Any way to have WebStorm auto-import with single quotes instead of double quotes?

Kevin Pinny
Kevin Pinny
~ 5 years ago

Hello John,

How you handle passing through events between parent and child. For example: Child has a subject.next() in it's template and has to pass data back up to it's parent component.

How would the parent component get this event using RxJs. Exactly the same way with subject.next() in the template of the parent component? The data should then get manipulated by the parent en pushed down again in the child component. So child component (dumb components) should only have event emitters with subject.next, but not switchMap logic and stuff?

Mark Kramer
Mark Kramer
~ 4 years ago

About time to update these to use pipeable operators instead of the old patched prototype operators. At least make a note that this was done with version 4 or so.