2020-09-17 13:10:16 -04:00
# Using forms for user input
2019-03-20 11:10:47 -04:00
2020-11-13 16:09:26 -05:00
This guide builds on the [Managing Data ](start/start-data "Try it: Managing Data" ) step of the Getting Started tutorial, [Get started with a basic Angular app ](start "Get started with a basic Angular app" ).
2019-03-20 11:10:47 -04:00
2019-09-24 15:23:24 -04:00
This section walks you through adding a form-based checkout feature to collect user information as part of checkout.
2019-03-20 11:10:47 -04:00
## Define the checkout form model
2020-11-13 16:09:26 -05:00
This step shows you how to set up the checkout form model in the component class.
The form model determines the status of the form.
2019-03-20 11:10:47 -04:00
1. Open `cart.component.ts` .
2020-11-13 16:09:26 -05:00
1. Import the `FormBuilder` service from the `@angular/forms` package.
This service provides convenient methods for generating controls.
2019-03-20 11:10:47 -04:00
2020-11-13 16:09:26 -05:00
< code-example header = "src/app/cart/cart.component.ts" path = "getting-started/src/app/cart/cart.component.ts" region = "imports" >
< / code-example >
2019-03-20 11:10:47 -04:00
2020-11-13 16:09:26 -05:00
1. Inject the `FormBuilder` service in the `CartComponent` `constructor()` .
This service is part of the `ReactiveFormsModule` module, which you've already imported.
2019-03-20 11:10:47 -04:00
2020-11-13 16:09:26 -05:00
< code-example header = "src/app/cart/cart.component.ts" path = "getting-started/src/app/cart/cart.component.ts" region = "inject-form-builder" >
< / code-example >
2019-03-20 11:10:47 -04:00
2020-11-13 16:09:26 -05:00
1. To gather the user's name and address, use the `FormBuilder` `group()` method to set the `checkoutForm` property to a form model containing `name` and `address` fields.
2019-03-20 11:10:47 -04:00
2020-11-13 16:09:26 -05:00
< code-example header = "src/app/cart/cart.component.ts" path = "getting-started/src/app/cart/cart.component.ts" region = "checkout-form-group" > < / code-example >
2019-03-20 11:10:47 -04:00
2020-11-13 16:09:26 -05:00
1. Define an `onSubmit()` method to process the form.
This method allows users to submit their name and address.
In addition, this method uses the `clearCart()` method of the `CartService` to reset the form and clear the cart.
2019-03-20 11:10:47 -04:00
2020-11-13 16:09:26 -05:00
The entire cart component class is as follows:
2019-03-20 11:10:47 -04:00
2020-11-13 16:09:26 -05:00
< code-example header = "src/app/cart/cart.component.ts" path = "getting-started/src/app/cart/cart.component.ts" >
< / code-example >
2019-03-20 11:10:47 -04:00
## Create the checkout form
2020-11-13 16:09:26 -05:00
Use the following steps to add a checkout form at the bottom of the Cart view.
2019-03-20 11:10:47 -04:00
2020-11-13 16:09:26 -05:00
1. At the bottom of `cart.component.html` , add an HTML `<form>` element and a **Purchase** button.
2019-03-20 11:10:47 -04:00
2020-11-13 16:09:26 -05:00
1. Use a `formGroup` property binding to bind `checkoutForm` to the HTML `<form>` .
2019-03-20 11:10:47 -04:00
2019-04-11 10:44:50 -04:00
< code-example header = "src/app/cart/cart.component.html" path = "getting-started/src/app/cart/cart.component.3.html" region = "checkout-form" >
< / code-example >
2019-03-20 11:10:47 -04:00
1. On the `form` tag, use an `ngSubmit` event binding to listen for the form submission and call the `onSubmit()` method with the `checkoutForm` value.
2019-09-24 15:23:24 -04:00
< code-example path = "getting-started/src/app/cart/cart.component.html" header = "src/app/cart/cart.component.html (cart component template detail)" region = "checkout-form-1" >
2019-04-11 10:44:50 -04:00
< / code-example >
2019-03-20 11:10:47 -04:00
2020-11-13 16:09:26 -05:00
1. Add `<input>` fields for `name` and `address` , each with a `formControlName` attribute that binds to the `checkoutForm` form controls for `name` and `address` to their `<input>` fields.
The complete component is as follows:
2019-03-20 11:10:47 -04:00
2019-09-24 15:23:24 -04:00
< code-example path = "getting-started/src/app/cart/cart.component.html" header = "src/app/cart/cart.component.html" region = "checkout-form-2" >
2019-04-11 10:44:50 -04:00
< / code-example >
2019-03-20 11:10:47 -04:00
2020-11-13 16:09:26 -05:00
After putting a few items in the cart, users can review their items, enter their name and address, and submit their purchase.
2019-03-20 11:10:47 -04:00
2019-11-11 17:47:51 -05:00
< div class = "lightbox" >
2020-02-18 13:14:48 -05:00
< img src = 'generated/images/guide/start/cart-with-items-and-form.png' alt = "Cart view with checkout form" >
2019-11-11 17:47:51 -05:00
< / div >
2019-03-20 11:10:47 -04:00
2020-11-13 16:09:26 -05:00
To confirm submission, open the console to see an object containing the name and address you submitted.
## What's next
2019-03-20 11:10:47 -04:00
2020-11-13 16:09:26 -05:00
You have a complete online store application with a product catalog, a shopping cart, and a checkout function.
2019-03-20 11:10:47 -04:00
2020-02-18 13:14:48 -05:00
[Continue to the "Deployment" section ](start/start-deployment "Try it: Deployment" ) to move to local development, or deploy your app to Firebase or your own server.