- Overview
- Transcript
5.1 Handling User Input With Template Reference Variables
In this lesson I'll show you how to create template reference variables that will let you refer to a specific element from other places in the template.
1.Introduction6 lessons, 42:00
1.1Introduction00:48
1.2Get Started With Angular-CLI11:09
1.3Developing With Angular-CLI13:17
1.4TypeScript vs. JavaScript06:54
1.5Angular Modules From the CLI04:31
1.6CLI Options05:21
2.Get Started With Angular7 lessons, 42:38
2.1Bootstrapping the Application04:30
2.2The Application Module04:15
2.3The Application Component08:06
2.4Component Styling03:06
2.5Global Styling05:11
2.6Creating a Component With the CLI09:34
2.7Creating a Service With the CLI07:56
3.Core Concepts7 lessons, 55:20
3.1Component Trees06:20
3.2Dependency Injection06:52
3.3Content Projection05:38
3.4Component and Directive Lifecycle Methods06:31
3.5Component-Only Lifecycle Methods05:28
3.6Decorators07:36
3.7Models16:55
4.Template Deep Dive11 lessons, 1:10:56
4.1Basic Data Binding With Interpolation05:35
4.2Property Bindings07:07
4.3Attribute Bindings03:29
4.4Event Bindings08:16
4.5Class and Style Bindings05:44
4.6The `NgClass` and `NgStyle` Directives05:04
4.7The `*ngIf` Directive04:41
4.8The `*ngFor` Directive09:29
4.9Inputs05:33
4.10Using Pipes in a Template07:31
4.11Using Pipes in a Class08:27
5.Forms10 lessons, 1:45:41
5.1Handling User Input With Template Reference Variables07:06
5.2Template-Driven Forms11:10
5.3Template-Driven Forms: Validation and Submission14:00
5.4Reactive Forms11:26
5.5Using a `FormBuilder`08:01
5.6Reactive Validation With Built-in Validators14:53
5.7Creating Custom Validators for Template-Driven Forms12:18
5.8Creating Custom Validators for Reactive Forms08:26
5.9Observing Form State Changes12:40
5.10Working With the `@HostListener` Decorator05:41
6.Routing9 lessons, 1:15:10
6.1Defining and Configuring Routes07:53
6.2Rendering Components With Router Outlets10:14
6.3Using Router Links for Navigation05:25
6.4Navigating Routes Using the Router06:24
6.5Determining the Active Route Using an Activated Route07:16
6.6Working With Route Parameters10:42
6.7Using Route Guards07:36
6.8Observing Router Events10:55
6.9Adding Child Routes08:45
7.Using the HTTP Client5 lessons, 56:24
7.1Sending an HTTP Request10:52
7.2Handling an HTTP Response11:22
7.3Setting Request Headers12:33
7.4Intercepting Requests09:04
7.5Finishing the Example Application12:33
8.Testing10 lessons, 1:23:27
8.1Service Unit Test Preparation10:45
8.2Unit Testing Services13:24
8.3Component Unit Test Preparation12:35
8.4Unit Testing Components07:27
8.5Unit Testing Component Templates06:58
8.6Unit Testing Pipes04:41
8.7Unit Testing Directives04:56
8.8Unit Testing Validators04:48
8.9Unit Testing Observables11:37
8.10Unit Testing HTTP Interceptors06:16
9.Building for Production1 lesson, 03:40
9.1Building for Production03:40
10.Conclusion1 lesson, 01:32
10.1Conclusion01:32
5.1 Handling User Input With Template Reference Variables
Hi folks, in this lesson, we're going to look at how we can work with data that users enter into forms. There are a number of different ways that we can capture user inputs. But in this lesson, I want to focus on how we can achieve it using template reference variables, which are special identifies that we can add to elements in a template. Let's take a look. Let's open up the start component. In the template for the start component, there is an input element for the user to enter their name into. It's up here. At the moment, it's just a regular input, all it has is a name attribute. Let's add a template reference variable to this input. We used the hash sign and then the name that we want to use for the template variable. So in this case, the name of the template variable is player name. We can now use this variable anywhere else in the template, including in other bindings on the same element. In order to send the data entered into the input by the user to the component class, we can use an event binding for the change event. And then use the template reference variable that we just added to pass in the value. In the right hand side of the expression, when we specify the name of the method that we want to invoke, we can use the template variable to pass through the value of the inputs. We could use the event object to pass this through instead, but using the template variable and just passing the data that we're interested in, and not the entire event object structure, makes our code simpler and less coupled. So let's now add the method in the start component class to receive this data. So for now, let's just log the name to the console. And let's go back to the browser now, And let's enter some data here. And we can see that it gets logged to the console. So using a template variable is a really quick way to get data from the user into our component. In really simple forms, like the one in the example up here, this might be all that's required. At the moment, the start component has a method called start game, which emits the start event from the component. Let's wire up the player name as a property of the component, and then pass this and a couple of other properties out with the start event. So let's add the property to the top of the class first of all. In the set player name method that we just added, we can then set the value that gets passed in to this new property. And as this method isn't gonna return anything, let's just give it a return type of void. And we can do that with some of the other methods in this class, Because none of them actually return a value. And there's no reason why we can't do that with the ngOnInit method either. In fact, it's very unusual for one of the lifecycle methods to actually return a value, so very often these will be marked as void. And now back in the start game method where we emit the event. We want to emit an object with that event that passes some of these properties through. The home component already binds to the start event, we can see that in the template for the home component. So we just need to pass through the event object. And back in the start game method, we'll need to receive this event object So now what we want to do is get the player name from this event. So let's move where we create the new player, and we'll have to move the deck initialization as well. So instead of hard coding the name, we can get that from the event object. And I can see some red underlining here, it looks like there's a lint error. So it's saying that player name does not exist on the type object, and that's because we've given the event object a generic type of object. So there's a couple of things that we could do here. We could get rid of this type information, And then that makes the error go away. Or if we'd like to keep that type information, instead, We can use square bracket notation. Personally, I think it's better to not provide type information in this case. It's not a regular object that we're dealing with, it's an object, but it's an event object. And we don't have a specific type for that, we could make our own interface and specify the player name is a property of this type of events object, but in this case, we don't need to go that far. So let's just put a back to how it was and take off the type information. Okay, so let's go back to the browser. And when we start again, we can see in the console log here that the name that we entered into the form has been given to the player, awesome. So in this lesson we saw how we can make use of template reference variables to pass user input back to our model. We learned that this technique is preferable to passing event objects around in order to help keep the view and the logic neatly separated. Thanks for watching.