{"id":93629,"date":"2025-03-30T17:33:37","date_gmt":"2025-03-30T12:03:37","guid":{"rendered":"https:\/\/www.admecindia.co.in\/?p=93629"},"modified":"2025-03-31T12:47:55","modified_gmt":"2025-03-31T07:17:55","slug":"reactive-and-template-driven-forms-in-angular-with-easy-examples","status":"publish","type":"post","link":"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/","title":{"rendered":"Reactive and Template Driven Forms in Angular with Easy Examples"},"content":{"rendered":"<div id=\"bsf_rt_marker\"><\/div>\n<p>Forms are an important part of any website or app. They allow us to enter important information like usernames, email addresses, phone numbers, etc. Businesses and organizations always need visitors&#8217; details to convert them into customers. <strong><a href=\"https:\/\/angular.dev\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Angular<\/a> provides two main approaches for handling forms<\/strong>: <strong>reactive forms <\/strong>and <strong>template-driven <\/strong>forms. Both approaches take input from the users using view and complete the data validation. Later, they update the form from a data model and provide a way to monitor all the changes made by the user.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"569\" src=\"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/04\/angular.jpg?resize=1024%2C569&#038;ssl=1\" alt=\"Angular Js Quizzes\" class=\"wp-image-44906\" srcset=\"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/04\/angular.jpg?resize=1024%2C569&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/04\/angular.jpg?resize=300%2C167&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/04\/angular.jpg?resize=768%2C427&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/04\/angular.jpg?resize=1536%2C854&amp;ssl=1 1536w, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/04\/angular.jpg?resize=900%2C500&amp;ssl=1 900w, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/04\/angular.jpg?w=2000&amp;ssl=1 2000w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Reactive Forms in Angular<\/h2>\n\n\n\n<p>Reactive Forms is an approach where <strong>forms are built programmatically<\/strong> in Angular. Unlike the template-driven forms, which work on an HTML template, <strong>Reactive Forms are built in the TypeScript code<\/strong>. Reactive Forms give us more control over form validation and data handling.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Key Features of Reactive Approach<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Programmatic Form Creation: <\/strong>It allows us to have programmatic control over form components. We can define form controls using Form Control, Form Group, and Form Array.<\/li>\n\n\n\n<li><strong>Synchronous Updates:<\/strong>&nbsp; Forms input and validation are updated in real time.<\/li>\n\n\n\n<li><strong>Scalability:<\/strong> Best suited for complex forms with many fields or dynamic structures.<\/li>\n\n\n\n<li><strong>Advance Validation:<\/strong> support both built-in and custom validators. Custom validation helps us to make a complex validation form.<\/li>\n\n\n\n<li><strong>Form Control States:<\/strong><\/li>\n\n\n\n<li><strong>Valid: <\/strong>This means when the user enters the correct details.<\/li>\n\n\n\n<li><strong>Invalid: <\/strong>When the user enters the wrong information, and the form throws an error.<\/li>\n\n\n\n<li><strong>Touched:<\/strong><strong> <\/strong>Field was interacted with.<\/li>\n\n\n\n<li><strong>Dirty:<\/strong><strong> <\/strong>When the user changes the input field value.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Handling Forms with Reactive Approach<\/h3>\n\n\n\n<p>Reactive Forms in Angular are a model-driven approach. This approach offers better control over form validation, dynamic changes, and scalability compared to template-driven forms.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Steps to Create a Reactive Form in Angular<\/h3>\n\n\n\n<p><strong>1\ufe0f. Import ReactiveFormsModule<\/strong><\/p>\n\n\n\n<p>First, <strong>import <\/strong><code><strong>ReactiveFormsModule<\/strong><\/code> in your <code>app.module.ts<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import { NgModule } from '@angular\/core';\nimport { BrowserModule } from '@angular\/platform-browser';\nimport { ReactiveFormsModule } from '@angular\/forms';\nimport { AppComponent } from '.\/app.component';\n\n@NgModule({\n  declarations: [AppComponent],\n  imports: [BrowserModule, ReactiveFormsModule], \/\/ Add ReactiveFormsModule\n  bootstrap: [AppComponent]\n})\n  \nexport class AppModule {}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">NgModule<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/core<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">BrowserModule<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/platform-browser<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">ReactiveFormsModule<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/forms<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">AppComponent<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">.\/app.component<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D08770\">@NgModule<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #88C0D0\">declarations<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D08770\">AppComponent<\/span><span style=\"color: #D8DEE9FF\">]<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #88C0D0\">imports<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D08770\">BrowserModule<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D08770\">ReactiveFormsModule<\/span><span style=\"color: #D8DEE9FF\">]<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\">\/\/ Add ReactiveFormsModule<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #88C0D0\">bootstrap<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D08770\">AppComponent<\/span><span style=\"color: #D8DEE9FF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">export<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">AppModule<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:22px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>2\ufe0f. Define the Form in TypeScript<\/strong><\/p>\n\n\n\n<p>In <code><strong>app.component.ts<\/strong><\/code>, create a <code>FormGroup<\/code> with form controls:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import { Component } from '@angular\/core';\nimport { FormControl, FormGroup, Validators } from '@angular\/forms';\n\n@Component({\n\u00a0 selector: 'app-root',\n\u00a0 templateUrl: '.\/app.component.html',\n\u00a0 styleUrls: ['.\/app.component.css']\n})\n\nexport class AppComponent {\n\u00a0 \/\/ Create FormGroup\n\u00a0 myForm = new FormGroup({\n\u00a0\u00a0\u00a0 name: new FormControl('', [Validators.required, Validators.minLength(3)]), \/\/ Name field with validation\n\u00a0\u00a0\u00a0 email: new FormControl('', [Validators.required, Validators.email]), \/\/ Email field with validation\n\u00a0\u00a0\u00a0 password: new FormControl('', [Validators.required, Validators.minLength(6)])\n\u00a0 });\n\n\u00a0 \/\/ Handle Form Submission\n\u00a0 onSubmit() {\n\u00a0\u00a0\u00a0 console.log('Form Submitted:', this.myForm.value);\n\u00a0 }\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Component<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/core<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">FormControl<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">FormGroup<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Validators<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/forms<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D08770\">@Component<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">selector<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">app-root<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">templateUrl<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">.\/app.component.html<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">styleUrls<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">.\/app.component.css<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">export<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">AppComponent<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #616E88\">\/\/ Create FormGroup<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 myForm <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">FormGroup<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #88C0D0\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">FormControl<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">required<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">minLength<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #D8DEE9FF\">)])<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\">\/\/ Name field with validation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #88C0D0\">email<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">FormControl<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">required<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">email<\/span><span style=\"color: #D8DEE9FF\">])<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\">\/\/ Email field with validation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #88C0D0\">password<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">FormControl<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">required<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">minLength<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #B48EAD\">6<\/span><span style=\"color: #D8DEE9FF\">)])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #616E88\">\/\/ Handle Form Submission<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">onSubmit<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #D8DEE9\">console<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">log<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">Form Submitted:<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">this<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">myForm<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">value<\/span><span style=\"color: #D8DEE9FF\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:22px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>3\ufe0f. Create the Form in HTML<\/strong><\/p>\n\n\n\n<p>In <code><strong>app.component.html<\/strong><\/code>, bind the form to the component using <code>formGroup<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"<form [formGroup]=&quot;myForm&quot; (ngSubmit)=&quot;onSubmit()&quot;&gt;\n\u00a0 <!-- Name Input --&gt;\n\u00a0 <label for=&quot;name&quot;&gt;Name:<\/label&gt;\n\u00a0 <input type=&quot;text&quot; id=&quot;name&quot; formControlName=&quot;name&quot; \/&gt;\n\u00a0 <div *ngIf=&quot;myForm.get('name')?.invalid &amp;&amp; myForm.get('name')?.touched&quot;&gt;\n\u00a0\u00a0\u00a0 <small *ngIf=&quot;myForm.get('name')?.errors?.required&quot;&gt;Name is required.<\/small&gt;\n\u00a0\u00a0\u00a0 <small *ngIf=&quot;myForm.get('name')?.errors?.minlength&quot;&gt;Must be at least 3 characters.<\/small&gt;\n\u00a0 <\/div&gt;\n\n\u00a0 <!-- Email Input --&gt;\n\u00a0 <label for=&quot;email&quot;&gt;Email:<\/label&gt;\n\u00a0 <input type=&quot;email&quot; id=&quot;email&quot; formControlName=&quot;email&quot; \/&gt;\n\u00a0 <div *ngIf=&quot;myForm.get('email')?.invalid &amp;&amp; myForm.get('email')?.touched&quot;&gt;\n\u00a0\u00a0\u00a0 <small *ngIf=&quot;myForm.get('email')?.errors?.required&quot;&gt;Email is required.<\/small&gt;\n\u00a0\u00a0\u00a0 <small *ngIf=&quot;myForm.get('email')?.errors?.email&quot;&gt;Invalid email format.<\/small&gt;\n\u00a0 <\/div&gt;\n\n\u00a0 <!-- Password Input --&gt;\n\u00a0 <label for=&quot;password&quot;&gt;Password:<\/label&gt;\n\u00a0 <input type=&quot;password&quot; id=&quot;password&quot; formControlName=&quot;password&quot; \/&gt;\n\u00a0 <div *ngIf=&quot;myForm.get('password')?.invalid &amp;&amp; myForm.get('password')?.touched&quot;&gt;\n\u00a0\u00a0\u00a0 <small *ngIf=&quot;myForm.get('password')?.errors?.required&quot;&gt;Password is required.<\/small&gt;\n\u00a0\u00a0\u00a0 <small *ngIf=&quot;myForm.get('password')?.errors?.minlength&quot;&gt;Must be at least 6 characters.<\/small&gt;\n\u00a0 <\/div&gt;\n\n\u00a0 <!-- Submit Button --&gt;\n\u00a0 <button type=&quot;submit&quot; [disabled]=&quot;myForm.invalid&quot;&gt;Submit<\/button&gt;\n<\/form&gt;\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">&lt;form<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">[formGroup]=&quot;myForm&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">(ngSubmit)=&quot;onSubmit()&quot;&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;!--<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Name<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">--&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;label<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">for<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">name<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\">Name:<\/span><span style=\"color: #81A1C1\">&lt;\/label&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">&lt;input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">text<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">id<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">name<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">formControlName<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">name<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">&lt;div<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;name&#39;)?.invalid<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">&amp;&amp;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">myForm.get(&#39;name&#39;)?.touched&quot;&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;small<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;name&#39;)?.errors?.required&quot;&gt;Name<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">required.&lt;\/small&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;small<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;name&#39;)?.errors?.minlength&quot;&gt;Must<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">be<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">at<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">least<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">3<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">characters.&lt;\/small&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;\/div&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;!--<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Email<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">--&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;label<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">for<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\">Email:<\/span><span style=\"color: #81A1C1\">&lt;\/label&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">&lt;input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">id<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">formControlName<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">&lt;div<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;email&#39;)?.invalid<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">&amp;&amp;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">myForm.get(&#39;email&#39;)?.touched&quot;&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;small<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;email&#39;)?.errors?.required&quot;&gt;Email<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">required.&lt;\/small&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;small<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;email&#39;)?.errors?.email&quot;&gt;Invalid<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">email<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">format.&lt;\/small&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;\/div&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;!--<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Password<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">--&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;label<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">for<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">password<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\">Password:<\/span><span style=\"color: #81A1C1\">&lt;\/label&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">&lt;input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">password<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">id<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">password<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">formControlName<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">password<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">&lt;div<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;password&#39;)?.invalid<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">&amp;&amp;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">myForm.get(&#39;password&#39;)?.touched&quot;&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;small<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;password&#39;)?.errors?.required&quot;&gt;Password<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">required.&lt;\/small&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;small<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;password&#39;)?.errors?.minlength&quot;&gt;Must<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">be<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">at<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">least<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">6<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">characters.&lt;\/small&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;\/div&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;!--<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Submit<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Button<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">--&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;button<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">submit<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">[disabled]=&quot;myForm.invalid&quot;&gt;Submit&lt;\/button&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">&lt;\/form&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:22px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Features of Reactive Forms<\/h3>\n\n\n\n<p>\u2714 Better validation handling<br>\u2714 Easier to manage complex forms<br>\u2714 Supports dynamic form controls<br>\u2714 Easier testing<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Validators in Reactive Forms (Angular)<\/h3>\n\n\n\n<p>Angular <strong>Reactive Forms<\/strong> provide <strong>built-in validators<\/strong> and allow you to create <strong>custom validators<\/strong> for complex validation logic.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. Built-in Validators<\/h4>\n\n\n\n<p>Angular provides several built-in validators under the <code><strong>Validators<\/strong><\/code> class.<\/p>\n\n\n\n<p><strong>Common Built-in Validators<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Validator<\/strong><\/td><td><strong>Description<\/strong><\/td><\/tr><\/thead><tbody><tr><td><code>Validators.required<\/code><\/td><td>Field must not be empty<\/td><\/tr><tr><td><code>Validators.minLength(length)<\/code><\/td><td>Minimum character length<\/td><\/tr><tr><td><code>Validators.maxLength(length)<\/code><\/td><td>Maximum character length<\/td><\/tr><tr><td><code>Validators.pattern(regex)<\/code><\/td><td>Must match a specific pattern<\/td><\/tr><tr><td><code>Validators.email<\/code><\/td><td>Ensures a valid email format<\/td><\/tr><tr><td><code>Validators.min(value)<\/code><\/td><td>Minimum number allowed<\/td><\/tr><tr><td><code>Validators.max(value)<\/code><\/td><td>Maximum number allowed<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Example: Applying Built-in Validators<\/strong><\/p>\n\n\n\n<p>Modify <code>app.component.ts<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import { Component } from '@angular\/core';\nimport { FormControl, FormGroup, Validators } from '@angular\/forms';\n\n@Component({\n\u00a0 selector: 'app-root',\n\u00a0 templateUrl: '.\/app.component.html',\n\u00a0 styleUrls: ['.\/app.component.css']\n})\n\nexport class AppComponent {\n\u00a0 myForm = new FormGroup({\n\u00a0\u00a0\u00a0 name: new FormControl('', [Validators.required, Validators.minLength(3)]),\n\u00a0\u00a0\u00a0 email: new FormControl('', [Validators.required, Validators.email]),\n\u00a0\u00a0\u00a0 password: new FormControl('', [Validators.required, Validators.minLength(6)]),\n\u00a0\u00a0\u00a0 age: new FormControl('', [Validators.required, Validators.min(18), Validators.max(60)]),\n\u00a0 });\n\n\u00a0 onSubmit() {\n\u00a0\u00a0\u00a0 console.log('Form Data:', this.myForm.value);\n\u00a0 }\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Component<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/core<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">FormControl<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">FormGroup<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Validators<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/forms<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D08770\">@Component<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">selector<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">app-root<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">templateUrl<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">.\/app.component.html<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">styleUrls<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">.\/app.component.css<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">export<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">AppComponent<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 myForm <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">FormGroup<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #88C0D0\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">FormControl<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">required<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">minLength<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #B48EAD\">3<\/span><span style=\"color: #D8DEE9FF\">)])<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #88C0D0\">email<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">FormControl<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">required<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">email<\/span><span style=\"color: #D8DEE9FF\">])<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #88C0D0\">password<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">FormControl<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">required<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">minLength<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #B48EAD\">6<\/span><span style=\"color: #D8DEE9FF\">)])<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #88C0D0\">age<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">FormControl<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">required<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">min<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #B48EAD\">18<\/span><span style=\"color: #D8DEE9FF\">)<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">max<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #B48EAD\">60<\/span><span style=\"color: #D8DEE9FF\">)])<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">onSubmit<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #D8DEE9\">console<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">log<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">Form Data:<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">this<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">myForm<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">value<\/span><span style=\"color: #D8DEE9FF\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:22px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>Displaying Validation Errors in HTML<\/strong><\/code><\/pre>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"<form [formGroup]=&quot;myForm&quot; (ngSubmit)=&quot;onSubmit()&quot;&gt;\n\u00a0 <input type=&quot;text&quot; formControlName=&quot;name&quot; placeholder=&quot;Enter Name&quot; \/&gt;\n\u00a0 <div *ngIf=&quot;myForm.get('name')?.invalid &amp;&amp; myForm.get('name')?.touched&quot;&gt;\n\u00a0\u00a0\u00a0 <small *ngIf=&quot;myForm.get('name')?.errors?.required&quot;&gt;Name is required.<\/small&gt;\n\u00a0\u00a0\u00a0 <small *ngIf=&quot;myForm.get('name')?.errors?.minlength&quot;&gt;Minimum 3 characters required.<\/small&gt;\n\u00a0 <\/div&gt;\n\u00a0\u00a0 <button type=&quot;submit&quot; [disabled]=&quot;myForm.invalid&quot;&gt;Submit<\/button&gt;\n<\/form&gt;\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">&lt;form<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">[formGroup]=&quot;myForm&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">(ngSubmit)=&quot;onSubmit()&quot;&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">text<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">formControlName<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">name<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">placeholder<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Enter Name<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">&lt;div<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;name&#39;)?.invalid<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">&amp;&amp;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">myForm.get(&#39;name&#39;)?.touched&quot;&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;small<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;name&#39;)?.errors?.required&quot;&gt;Name<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">required.&lt;\/small&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;small<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;name&#39;)?.errors?.minlength&quot;&gt;Minimum<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">3<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">characters<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">required.&lt;\/small&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;\/div&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;button<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">submit<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">[disabled]=&quot;myForm.invalid&quot;&gt;Submit&lt;\/button&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">&lt;\/form&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:22px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">2. Custom Validators<\/h4>\n\n\n\n<p>If the built-in validators are not enough, you can create your <strong>custom validators<\/strong>.<\/p>\n\n\n\n<p><strong>Example: Custom Validator for Strong Password<\/strong><\/p>\n\n\n\n<p>A strong password must contain <strong>at least one uppercase letter, one digit, and one special character<\/strong>.<\/p>\n\n\n\n<p><strong>Step 1: Create a Custom Validator Function<\/strong><\/p>\n\n\n\n<p>Create a new file <code>password.validator.ts<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import { AbstractControl, ValidationErrors } from '@angular\/forms';\n\nexport function strongPasswordValidator(control: AbstractControl): ValidationErrors | null {\n\u00a0 const password = control.value;\n\n\u00a0 if (!password) return null; \/\/ If empty, let required validator handle it.\n\u00a0 const strongPasswordRegex = \/^(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&amp;])[A-Za-z\\d@$!%*?&amp;]{6,}$\/;\n\u00a0 return strongPasswordRegex.test(password) ? null : { weakPassword: true };\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">AbstractControl<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">ValidationErrors<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/forms<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">export<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">function<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">strongPasswordValidator<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">control<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\"> AbstractControl<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\"> ValidationErrors <\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">null<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">const<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">password<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">control<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">value<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #D8DEE9\">password<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">null;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\">\/\/ If empty, let required validator handle it.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">const<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">strongPasswordRegex<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #EBCB8B\"> <\/span><span style=\"color: #ECEFF4\">\/<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #ECEFF4\">(?=<\/span><span style=\"color: #EBCB8B\">.<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #EBCB8B\">A-Z<\/span><span style=\"color: #ECEFF4\">])(?=<\/span><span style=\"color: #EBCB8B\">.<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #EBCB8B\">\\d<\/span><span style=\"color: #ECEFF4\">)(?=<\/span><span style=\"color: #EBCB8B\">.<\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #EBCB8B\">@$!%*?&amp;<\/span><span style=\"color: #ECEFF4\">])[<\/span><span style=\"color: #EBCB8B\">A-Za-z\\d@$!%*?&amp;<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #81A1C1\">{6,}$<\/span><span style=\"color: #ECEFF4\">\/<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">strongPasswordRegex<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">test<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #D8DEE9\">password<\/span><span style=\"color: #D8DEE9FF\">) <\/span><span style=\"color: #81A1C1\">?<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">null<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">weakPassword<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">true<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:22px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Step 2: Apply the Custom Validator<\/strong><\/p>\n\n\n\n<p>Modify <code>app.component.ts<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import { Component } from '@angular\/core';\nimport { FormControl, FormGroup, Validators } from '@angular\/forms';\nimport { strongPasswordValidator } from '.\/password.validator';\n\n@Component({\n\u00a0 selector: 'app-root',\n\u00a0 templateUrl: '.\/app.component.html',\n\u00a0 styleUrls: ['.\/app.component.css']\n})\n\nexport class AppComponent {\n\u00a0 myForm = new FormGroup({\n\u00a0\u00a0\u00a0 password: new FormControl('', [Validators.required, strongPasswordValidator]),\n\u00a0 });\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Component<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/core<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">FormControl<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">FormGroup<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Validators<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/forms<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">strongPasswordValidator<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">.\/password.validator<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D08770\">@Component<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">selector<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">app-root<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">templateUrl<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">.\/app.component.html<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">styleUrls<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">.\/app.component.css<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">export<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">AppComponent<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 myForm <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">FormGroup<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #88C0D0\">password<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">FormControl<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">required<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">strongPasswordValidator<\/span><span style=\"color: #D8DEE9FF\">])<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:22px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Step 3: Display Validation Messages in HTML<\/strong><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"<input type=&quot;password&quot; formControlName=&quot;password&quot; placeholder=&quot;Enter Password&quot; \/&gt;\n<div *ngIf=&quot;myForm.get('password')?.invalid &amp;&amp; myForm.get('password')?.touched&quot;&gt;\n\u00a0 <small *ngIf=&quot;myForm.get('password')?.errors?.required&quot;&gt;Password is required.<\/small&gt;\n\u00a0 <small *ngIf=&quot;myForm.get('password')?.errors?.weakPassword&quot;&gt;\n\u00a0\u00a0\u00a0 Password must have at least 1 uppercase, 1 number, and 1 special character.\n\u00a0 <\/small&gt;\n<\/div&gt;\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">&lt;input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">password<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">formControlName<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">password<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">placeholder<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Enter Password<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">&lt;div<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;password&#39;)?.invalid<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">&amp;&amp;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">myForm.get(&#39;password&#39;)?.touched&quot;&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;small<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;password&#39;)?.errors?.required&quot;&gt;Password<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">required.&lt;\/small&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;small<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;password&#39;)?.errors?.weakPassword&quot;&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #8FBCBB\">Password<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">must<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">have<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">at<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">least<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">1<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">uppercase,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">1<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">number,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">and<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">1<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">special<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">character.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;\/small&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">&lt;\/div&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:22px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">3. Async Validators (For API Validation)<\/h4>\n\n\n\n<p>If you need to <strong>validate a field asynchronously<\/strong>, like checking if an email is already taken, you can use <strong>async validators<\/strong>.<\/p>\n\n\n\n<p><strong>Example: Async Validator to Check if Email Exists<\/strong><\/p>\n\n\n\n<p>Create a new file <code>email.validator.ts<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import { AbstractControl } from '@angular\/forms';\nimport { Observable, of } from 'rxjs';\nimport { delay, map } from 'rxjs\/operators';\n\n\/\/ Simulate an API call\nconst existingEmails = ['test@example.com', 'user@email.com'];\n\nexport function emailExistsValidator(control: AbstractControl): Observable<{ emailTaken: true } | null&gt; {\n\u00a0 return of(existingEmails.includes(control.value)).pipe(\n\u00a0\u00a0\u00a0 delay(1000), \/\/ Simulate network delay\n\u00a0\u00a0\u00a0 map(exists =&gt; (exists ? { emailTaken: true } : null))\n\u00a0 );\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">AbstractControl<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/forms<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Observable<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">of<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">rxjs<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">delay<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">map<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">rxjs\/operators<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Simulate an API call<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">const<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">existingEmails<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">test@example.com<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">user@email.com<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\">]<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">export<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">function<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">emailExistsValidator<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">control<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\"> AbstractControl<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\"> Observable<\/span><span style=\"color: #ECEFF4\">&lt;{<\/span><span style=\"color: #D8DEE9FF\"> emailTaken<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">true<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">|<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">null<\/span><span style=\"color: #ECEFF4\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">of<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #D8DEE9\">existingEmails<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">includes<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #D8DEE9\">control<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">value<\/span><span style=\"color: #D8DEE9FF\">))<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">pipe<\/span><span style=\"color: #D8DEE9FF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #88C0D0\">delay<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #B48EAD\">1000<\/span><span style=\"color: #D8DEE9FF\">)<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\">\/\/ Simulate network delay<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #88C0D0\">map<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #D8DEE9\">exists<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=&gt;<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><span style=\"color: #D8DEE9\">exists<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">?<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">emailTaken<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">true<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">null<\/span><span style=\"color: #D8DEE9FF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 )<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:22px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Apply it in <code>app.component.ts<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import { Component } from '@angular\/core';\nimport { FormControl, FormGroup, Validators } from '@angular\/forms';\nimport { emailExistsValidator } from '.\/email.validator';\n\n@Component({\n\u00a0 selector: 'app-root',\n\u00a0 templateUrl: '.\/app.component.html',\n\u00a0 styleUrls: ['.\/app.component.css']\n})\n\nexport class AppComponent {\n\u00a0 myForm = new FormGroup({\n\u00a0\u00a0\u00a0 email: new FormControl('', [Validators.required, Validators.email], [emailExistsValidator]),\n\u00a0 });\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Component<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/core<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">FormControl<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">FormGroup<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Validators<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/forms<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">emailExistsValidator<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">.\/email.validator<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D08770\">@Component<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">selector<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">app-root<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">templateUrl<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">.\/app.component.html<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">styleUrls<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">.\/app.component.css<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">export<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">AppComponent<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 myForm <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">FormGroup<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #88C0D0\">email<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">FormControl<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">required<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Validators<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">email<\/span><span style=\"color: #D8DEE9FF\">]<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D8DEE9\">emailExistsValidator<\/span><span style=\"color: #D8DEE9FF\">])<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:22px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>HTML:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"<input type=&quot;email&quot; formControlName=&quot;email&quot; placeholder=&quot;Enter Email&quot; \/&gt;\n<div *ngIf=&quot;myForm.get('email')?.invalid &amp;&amp; myForm.get('email')?.touched&quot;&gt;\n\u00a0 <small *ngIf=&quot;myForm.get('email')?.errors?.required&quot;&gt;Email is required.<\/small&gt;\n\u00a0 <small *ngIf=&quot;myForm.get('email')?.errors?.email&quot;&gt;Invalid email format.<\/small&gt;\n\u00a0 <small *ngIf=&quot;myForm.get('email')?.errors?.emailTaken&quot;&gt;Email already exists.<\/small&gt;\n<\/div&gt;\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">&lt;input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">formControlName<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">placeholder<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Enter Email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">&lt;div<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;email&#39;)?.invalid<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">&amp;&amp;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">myForm.get(&#39;email&#39;)?.touched&quot;&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;small<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;email&#39;)?.errors?.required&quot;&gt;Email<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">required.&lt;\/small&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;small<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;email&#39;)?.errors?.email&quot;&gt;Invalid<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">email<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">format.&lt;\/small&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;small<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;myForm.get(&#39;email&#39;)?.errors?.emailTaken&quot;&gt;Email<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">already<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">exists.&lt;\/small&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">&lt;\/div&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:33px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Summary of Reactive Forms in Angular<\/h3>\n\n\n\n<p>\u2714 <strong>Built-in Validators<\/strong>: <code>required<\/code>, <code>minLength<\/code>, <code>email<\/code>, <code>pattern<\/code>, etc.<br>\u2714 <strong>Custom Validators<\/strong>: For advanced validation like <strong>strong passwords<\/strong>.<br>\u2714 <strong>Async Validators<\/strong>: For checking API data, like <strong>email availability<\/strong>.<strong><\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Template Driven Forms<\/h2>\n\n\n\n<p>Template-driven Forms are used for small or simple forms, while Reactive forms are mostly used for complex forms. Template-driven forms use Two-ways binding to update the date model in the component as changes are made in the Template and vice versa. You can build any kind of form using Template- login form, contact form, and any business form. It uses built-in validators to manage the form input and user validation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Key features of Template Driven approach<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Simple and easy to use: <\/strong>Template-driven forms are simple to implement, and most of the logic is handled in an HTML template, which makes the code clean and simple. In template-driven forms, Angular automatically manages form control and validation.<\/li>\n\n\n\n<li><strong>Use ng-model for two-way binding: <\/strong>In template-driven form, Angular uses ng-model for two-way binding means data can flow in both directions, from the component to the form and from the form to the component.<\/li>\n\n\n\n<li><strong>Automatic form management:<\/strong> In template-driven forms, Angular automatically manages form data like form control, form state, form validation, and form submission.<\/li>\n<\/ul>\n\n\n\n<p>It used ng-directives for controlling the form.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Built-in form validation: <\/strong>Angular has various built-in Validator methods for controlling the form. These validators can be applied using HTML attributes, and Angular automatically checks the input against them. Examples- requires, minLength, maxLength, min, max, disabled, required.<\/li>\n\n\n\n<li><strong>Form state Tracking:<\/strong> Angular automatically tracks the state of each form and form control. Like when we make changes in the input field, update, delete, or enter any invalid data so all these actions are tracked by Angular automatically.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Working with Template-Driven Forms in Angular<\/h3>\n\n\n\n<p><strong>Template-driven forms<\/strong> in Angular allow you to handle form validation and data binding directly in the template (<code>.html<\/code> file). The best thing is that you don\u2019t need to write much TypeScript code.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Steps to Create a Template-Driven Form in Angular<\/h3>\n\n\n\n<p><strong>1\ufe0f<\/strong><strong>. I<\/strong><strong>mport FormsModule<\/strong><\/p>\n\n\n\n<p>Before using template-driven forms, <strong>import<\/strong> <code>FormsModule<\/code> in your <strong>app.module.ts<\/strong>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import { NgModule } from '@angular\/core';\nimport { BrowserModule } from '@angular\/platform-browser';\nimport { FormsModule } from '@angular\/forms'; \/\/ Import FormsModule\nimport { AppComponent } from '.\/app.component';\n\n@NgModule({\n\u00a0 declarations: [AppComponent],\n\u00a0 imports: [BrowserModule, FormsModule], \/\/ Add FormsModule here\n\u00a0 bootstrap: [AppComponent]\n})\n\nexport class AppModule {}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">NgModule<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/core<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">BrowserModule<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/platform-browser<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">FormsModule<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/forms<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\">\/\/ Import FormsModule<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">AppComponent<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">.\/app.component<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D08770\">@NgModule<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">declarations<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D08770\">AppComponent<\/span><span style=\"color: #D8DEE9FF\">]<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">imports<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D08770\">BrowserModule<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D08770\">FormsModule<\/span><span style=\"color: #D8DEE9FF\">]<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\">\/\/ Add FormsModule here<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">bootstrap<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #D08770\">AppComponent<\/span><span style=\"color: #D8DEE9FF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">export<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">AppModule<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:22px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>2\ufe0f<\/strong><strong>. <\/strong><strong>Create the Form in HTML<\/strong><\/p>\n\n\n\n<p>In your <strong>app.component.html<\/strong>, create a simple form using <code><strong>ngModel<\/strong><\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"<form #myForm=&quot;ngForm&quot; (ngSubmit)=&quot;onSubmit()&quot;&gt;<br&gt;\u00a0 <!-- Name Input --&gt;<br&gt;\u00a0 <label for=&quot;name&quot;&gt;Name:<\/label&gt;<br&gt;\u00a0 <input type=&quot;text&quot; id=&quot;name&quot; name=&quot;name&quot; [(ngModel)]=&quot;user.name&quot; required \/&gt;<br&gt;<br&gt;\u00a0\u00a0<!-- Email Input --&gt;<br&gt;\u00a0 <label for=&quot;email&quot;&gt;Email:<\/label&gt;<br&gt;\u00a0 <input type=&quot;email&quot; id=&quot;email&quot; name=&quot;email&quot; [(ngModel)]=&quot;user.email&quot; required email \/&gt;<br&gt;<br&gt;\u00a0 <!-- Submit Button --&gt;<br&gt;\u00a0 <button type=&quot;submit&quot; [disabled]=&quot;myForm.invalid&quot;&gt;Submit<\/button&gt;<br&gt;<\/form&gt;\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">&lt;form<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">#myForm=&quot;ngForm&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">(ngSubmit)=&quot;onSubmit()&quot;&gt;&lt;br&gt;<\/span><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;!--<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Name<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">--&gt;&lt;br&gt;<\/span><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;label<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">for<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">name<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\">Name:<\/span><span style=\"color: #81A1C1\">&lt;\/label&gt;&lt;br&gt;<\/span><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">&lt;input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">text<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">id<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">name<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">name<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">[(ngModel)]=&quot;user.name&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">required<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/&gt;&lt;br&gt;&lt;br&gt;<\/span><span style=\"color: #D8DEE9FF\">\u00a0\u00a0&lt;!-- Email Input --&gt;<\/span><span style=\"color: #81A1C1\">&lt;br&gt;<\/span><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">&lt;label<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">for<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\">Email:<\/span><span style=\"color: #81A1C1\">&lt;\/label&gt;&lt;br&gt;<\/span><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">&lt;input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">id<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">[(ngModel)]=&quot;user.email&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">required<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">email<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/&gt;&lt;br&gt;&lt;br&gt;<\/span><span style=\"color: #D8DEE9FF\">\u00a0 &lt;!-- Submit Button --&gt;<\/span><span style=\"color: #81A1C1\">&lt;br&gt;<\/span><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #81A1C1\">&lt;button<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">submit<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">[disabled]=&quot;myForm.invalid&quot;&gt;Submit&lt;\/button&gt;&lt;br&gt;&lt;\/form&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:22px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>3\ufe0f<\/strong><strong>. <\/strong><strong>Handle Form Submission in TypeScript<\/strong><\/p>\n\n\n\n<p>In <strong>app.component.ts<\/strong>, define the <code>user<\/code> object and <code>onSubmit()<\/code> method:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"import { Component } from '@angular\/core';\n\n@Component({\n\u00a0 selector: 'app-root',\n\u00a0 templateUrl: '.\/app.component.html',\n\u00a0 styleUrls: ['.\/app.component.css']\n})\n\nexport class AppComponent {\n\u00a0 user = { name: '', email: '' }; \/\/ Data model\n\n\u00a0 onSubmit() {\n\u00a0\u00a0\u00a0 console.log('Form Submitted!', this.user);\n\u00a0 }\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Component<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">@angular\/core<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D08770\">@Component<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">selector<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">app-root<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">templateUrl<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">.\/app.component.html<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">styleUrls<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> [<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">.\/app.component.css<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">export<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">AppComponent<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 user <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">email<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;&#39;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\">\/\/ Data model<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #88C0D0\">onSubmit<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0\u00a0\u00a0 <\/span><span style=\"color: #D8DEE9\">console<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">log<\/span><span style=\"color: #D8DEE9FF\">(<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">Form Submitted!<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">this<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">user<\/span><span style=\"color: #D8DEE9FF\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:22px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Form Validation in Template-Driven Forms<\/h3>\n\n\n\n<p>Angular automatically validates form fields using <strong>directives<\/strong> like <code>required<\/code>, <code>email<\/code>, <code>minlength<\/code>, etc.<\/p>\n\n\n\n<p>Example of error messages:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"<input type=&quot;email&quot; name=&quot;email&quot; [(ngModel)]=&quot;user.email&quot; required email #emailField=&quot;ngModel&quot; \/&gt;\n<div *ngIf=&quot;emailField.invalid &amp;&amp; emailField.touched&quot;&gt;\n\u00a0 <small *ngIf=&quot;emailField.errors?.required&quot;&gt;Email is required.<\/small&gt;\n\u00a0 <small *ngIf=&quot;emailField.errors?.email&quot;&gt;Invalid email format.<\/small&gt;\n<\/div&gt;\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">&lt;input<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">type<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">email<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">[(ngModel)]=&quot;user.email&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">required<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">email<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">#emailField=&quot;ngModel&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">&lt;div<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;emailField.invalid<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">&amp;&amp;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">emailField.touched&quot;&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;small<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;emailField.errors?.required&quot;&gt;Email<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">required.&lt;\/small&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">\u00a0 <\/span><span style=\"color: #D8DEE9\">&lt;small<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">*ngIf=&quot;emailField.errors?.email&quot;&gt;Invalid<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">email<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">format.&lt;\/small&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">&lt;\/div&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:22px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Advantages of Template-Driven Forms<\/h3>\n\n\n\n<p>\u2705 Simple and easy to use<br>\u2705 Less code in TypeScript, more in HTML<br>\u2705 Best for small and simple forms<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Disadvantages<\/h3>\n\n\n\n<p>\u274c <strong>Not suitable for complex forms<\/strong><br>\u274c <strong>Difficult to scale and maintain<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion: Reactive vs Template Driven\u2013 when to use<\/h2>\n\n\n\n<p>Templates driven and reactive forms these both approaches in <strong><a href=\"https:\/\/www.admecindia.co.in\/course\/advanced-angular-master-plus-course\/\">Angular<\/a><\/strong> are very a powerful way to handle user input, but both have their benefits. <strong>Reactive forms are mostly used for complex designs<\/strong>, while <strong>template-driven forms are used for simple and small forms<\/strong>.<\/p>\n\n\n\n<p>Both approaches are valid, and it&#8217;s your choice which one you choose according to your application needs and complexity. For complex forms, Reactive is better, while for simple forms, template driven is good.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Similar Blogs to Read<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.admecindia.co.in\/web-development\/what-is-firebase-and-how-to-use-it-with-angular\/\" target=\"_blank\" rel=\"noreferrer noopener\">What is Firebase and how to use it with Angular?<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.admecindia.co.in\/web-design\/react-or-angular-which-is-best-for-a-beginner\/\" target=\"_blank\" rel=\"noreferrer noopener\">React or Angular \u2013 Which is best for a beginner?<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.admecindia.co.in\/web-design\/angular-10-minutes-installation-and-deployment\/\" target=\"_blank\" rel=\"noreferrer noopener\">Angular- 10 Minutes Installation and Deployment<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.admecindia.co.in\/web-design\/why-angular-superheroic-web-framework\/\" target=\"_blank\" rel=\"noreferrer noopener\">Why is Angular a Superheroic Web Framework?<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.admecindia.co.in\/web-design\/5-best-performance-tips-angular-developers\/\" target=\"_blank\" rel=\"noreferrer noopener\">5 Best Performance Tips for Angular Developers<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.admecindia.co.in\/web-design\/new-features-angular-7-not-skip\/\" target=\"_blank\" rel=\"noreferrer noopener\">New Features of Angular 7 Not to Skip<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.admecindia.co.in\/web-design\/what-are-15-most-important-features-angular-not-avoid\/\" target=\"_blank\" rel=\"noreferrer noopener\">What are the 15 Most Important Features of Angular Not to Avoid?<\/a><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Forms are an important part of any website or app. They allow us to enter important information like usernames, email addresses, phone numbers, etc. Businesses and organizations always need visitors&#8217; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":42302,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[454,80],"tags":[86],"class_list":["post-93629","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programming-languages","category-web-design","tag-angular"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Reactive and Template Driven Forms in Angular with Easy Examples - ADMEC Multimedia Institute<\/title>\n<meta name=\"description\" content=\"Forms are one of the most essentials elements in Angular. Explore Reactive and Template Driven Forms in Angular with Easy Examples here.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reactive and Template Driven Forms in Angular with Easy Examples - ADMEC Multimedia Institute\" \/>\n<meta property=\"og:description\" content=\"Forms are one of the most essentials elements in Angular. Explore Reactive and Template Driven Forms in Angular with Easy Examples here.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/\" \/>\n<meta property=\"og:site_name\" content=\"ADMEC Multimedia Institute\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/admecInstituteOfficial\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-03-30T12:03:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-31T07:17:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.admecindia.co.in\/wp-content\/uploads\/2022\/02\/Angular-Course-\u2013-Master-Plus.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1112\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"ADMEC Multimedia Institute\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@admecinstitute\" \/>\n<meta name=\"twitter:site\" content=\"@admecinstitute\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"ADMEC Multimedia Institute\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/\"},\"author\":{\"name\":\"ADMEC Multimedia Institute\",\"@id\":\"https:\/\/www.admecindia.co.in\/#\/schema\/person\/53466235b5c8703280e7b0ebab0c7dcb\"},\"headline\":\"Reactive and Template Driven Forms in Angular with Easy Examples\",\"datePublished\":\"2025-03-30T12:03:37+00:00\",\"dateModified\":\"2025-03-31T07:17:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/\"},\"wordCount\":322,\"publisher\":{\"@id\":\"https:\/\/www.admecindia.co.in\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/02\/Angular-Course-%E2%80%93-Master-Plus.jpg?fit=2000%2C1112&ssl=1\",\"keywords\":[\"Angular\"],\"articleSection\":[\"Programming Languages\",\"Web Design\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/\",\"url\":\"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/\",\"name\":\"Reactive and Template Driven Forms in Angular with Easy Examples - ADMEC Multimedia Institute\",\"isPartOf\":{\"@id\":\"https:\/\/www.admecindia.co.in\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/02\/Angular-Course-%E2%80%93-Master-Plus.jpg?fit=2000%2C1112&ssl=1\",\"datePublished\":\"2025-03-30T12:03:37+00:00\",\"dateModified\":\"2025-03-31T07:17:55+00:00\",\"description\":\"Forms are one of the most essentials elements in Angular. Explore Reactive and Template Driven Forms in Angular with Easy Examples here.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/#primaryimage\",\"url\":\"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/02\/Angular-Course-%E2%80%93-Master-Plus.jpg?fit=2000%2C1112&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/02\/Angular-Course-%E2%80%93-Master-Plus.jpg?fit=2000%2C1112&ssl=1\",\"width\":2000,\"height\":1112,\"caption\":\"Angular Course Master Plus\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.admecindia.co.in\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reactive and Template Driven Forms in Angular with Easy Examples\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.admecindia.co.in\/#website\",\"url\":\"https:\/\/www.admecindia.co.in\/\",\"name\":\"ADMEC Multimedia Institute\",\"description\":\"Best Graphic Design, Web Design, UX Design, Animation Institute in Delhi\",\"publisher\":{\"@id\":\"https:\/\/www.admecindia.co.in\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.admecindia.co.in\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.admecindia.co.in\/#organization\",\"name\":\"ADMEC\",\"url\":\"https:\/\/www.admecindia.co.in\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.admecindia.co.in\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2024\/11\/admec-new-logo.jpeg?fit=225%2C225&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2024\/11\/admec-new-logo.jpeg?fit=225%2C225&ssl=1\",\"width\":225,\"height\":225,\"caption\":\"ADMEC\"},\"image\":{\"@id\":\"https:\/\/www.admecindia.co.in\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/admecInstituteOfficial\/\",\"https:\/\/x.com\/admecinstitute\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.admecindia.co.in\/#\/schema\/person\/53466235b5c8703280e7b0ebab0c7dcb\",\"name\":\"ADMEC Multimedia Institute\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.admecindia.co.in\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/85595b2b8e958b60299faadf7c199061dff85db95c35c29f25ef095f173f9f2c?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/85595b2b8e958b60299faadf7c199061dff85db95c35c29f25ef095f173f9f2c?s=96&r=g\",\"caption\":\"ADMEC Multimedia Institute\"},\"sameAs\":[\"https:\/\/www.admecindia.co.in\"],\"url\":\"https:\/\/www.admecindia.co.in\/author\/admec\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Reactive and Template Driven Forms in Angular with Easy Examples - ADMEC Multimedia Institute","description":"Forms are one of the most essentials elements in Angular. Explore Reactive and Template Driven Forms in Angular with Easy Examples here.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/","og_locale":"en_US","og_type":"article","og_title":"Reactive and Template Driven Forms in Angular with Easy Examples - ADMEC Multimedia Institute","og_description":"Forms are one of the most essentials elements in Angular. Explore Reactive and Template Driven Forms in Angular with Easy Examples here.","og_url":"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/","og_site_name":"ADMEC Multimedia Institute","article_publisher":"https:\/\/www.facebook.com\/admecInstituteOfficial\/","article_published_time":"2025-03-30T12:03:37+00:00","article_modified_time":"2025-03-31T07:17:55+00:00","og_image":[{"width":2000,"height":1112,"url":"https:\/\/www.admecindia.co.in\/wp-content\/uploads\/2022\/02\/Angular-Course-\u2013-Master-Plus.jpg","type":"image\/jpeg"}],"author":"ADMEC Multimedia Institute","twitter_card":"summary_large_image","twitter_creator":"@admecinstitute","twitter_site":"@admecinstitute","twitter_misc":{"Written by":"ADMEC Multimedia Institute","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/#article","isPartOf":{"@id":"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/"},"author":{"name":"ADMEC Multimedia Institute","@id":"https:\/\/www.admecindia.co.in\/#\/schema\/person\/53466235b5c8703280e7b0ebab0c7dcb"},"headline":"Reactive and Template Driven Forms in Angular with Easy Examples","datePublished":"2025-03-30T12:03:37+00:00","dateModified":"2025-03-31T07:17:55+00:00","mainEntityOfPage":{"@id":"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/"},"wordCount":322,"publisher":{"@id":"https:\/\/www.admecindia.co.in\/#organization"},"image":{"@id":"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/02\/Angular-Course-%E2%80%93-Master-Plus.jpg?fit=2000%2C1112&ssl=1","keywords":["Angular"],"articleSection":["Programming Languages","Web Design"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/","url":"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/","name":"Reactive and Template Driven Forms in Angular with Easy Examples - ADMEC Multimedia Institute","isPartOf":{"@id":"https:\/\/www.admecindia.co.in\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/#primaryimage"},"image":{"@id":"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/02\/Angular-Course-%E2%80%93-Master-Plus.jpg?fit=2000%2C1112&ssl=1","datePublished":"2025-03-30T12:03:37+00:00","dateModified":"2025-03-31T07:17:55+00:00","description":"Forms are one of the most essentials elements in Angular. Explore Reactive and Template Driven Forms in Angular with Easy Examples here.","breadcrumb":{"@id":"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/#primaryimage","url":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/02\/Angular-Course-%E2%80%93-Master-Plus.jpg?fit=2000%2C1112&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/02\/Angular-Course-%E2%80%93-Master-Plus.jpg?fit=2000%2C1112&ssl=1","width":2000,"height":1112,"caption":"Angular Course Master Plus"},{"@type":"BreadcrumbList","@id":"https:\/\/www.admecindia.co.in\/programming-languages\/reactive-and-template-driven-forms-in-angular-with-easy-examples\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.admecindia.co.in\/"},{"@type":"ListItem","position":2,"name":"Reactive and Template Driven Forms in Angular with Easy Examples"}]},{"@type":"WebSite","@id":"https:\/\/www.admecindia.co.in\/#website","url":"https:\/\/www.admecindia.co.in\/","name":"ADMEC Multimedia Institute","description":"Best Graphic Design, Web Design, UX Design, Animation Institute in Delhi","publisher":{"@id":"https:\/\/www.admecindia.co.in\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.admecindia.co.in\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.admecindia.co.in\/#organization","name":"ADMEC","url":"https:\/\/www.admecindia.co.in\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.admecindia.co.in\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2024\/11\/admec-new-logo.jpeg?fit=225%2C225&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2024\/11\/admec-new-logo.jpeg?fit=225%2C225&ssl=1","width":225,"height":225,"caption":"ADMEC"},"image":{"@id":"https:\/\/www.admecindia.co.in\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/admecInstituteOfficial\/","https:\/\/x.com\/admecinstitute"]},{"@type":"Person","@id":"https:\/\/www.admecindia.co.in\/#\/schema\/person\/53466235b5c8703280e7b0ebab0c7dcb","name":"ADMEC Multimedia Institute","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.admecindia.co.in\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/85595b2b8e958b60299faadf7c199061dff85db95c35c29f25ef095f173f9f2c?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/85595b2b8e958b60299faadf7c199061dff85db95c35c29f25ef095f173f9f2c?s=96&r=g","caption":"ADMEC Multimedia Institute"},"sameAs":["https:\/\/www.admecindia.co.in"],"url":"https:\/\/www.admecindia.co.in\/author\/admec\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2022\/02\/Angular-Course-%E2%80%93-Master-Plus.jpg?fit=2000%2C1112&ssl=1","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":474,"url":"https:\/\/www.admecindia.co.in\/web-design\/what-are-15-most-important-features-angular-not-avoid\/","url_meta":{"origin":93629,"position":0},"title":"What are the 15 Most Important Features of Angular Not to Avoid?","author":"ADMEC Multimedia Institute","date":"September 7, 2018","format":false,"excerpt":"Angular is an open-source structure managed by Google to deal with the difficulties encountered by the UI developers for single page applications while establishing as well as evaluating the code. Angular incorporates HTML codes as well as application components developing a framework. It is based upon the Model View Controller\u2026","rel":"","context":"In &quot;Web Design&quot;","block_context":{"text":"Web Design","link":"https:\/\/www.admecindia.co.in\/category\/web-design\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2018\/09\/angular-important-features-to-know.jpg?fit=1200%2C667&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2018\/09\/angular-important-features-to-know.jpg?fit=1200%2C667&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2018\/09\/angular-important-features-to-know.jpg?fit=1200%2C667&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2018\/09\/angular-important-features-to-know.jpg?fit=1200%2C667&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2018\/09\/angular-important-features-to-know.jpg?fit=1200%2C667&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":32894,"url":"https:\/\/www.admecindia.co.in\/web-design\/react-or-angular-which-is-best-for-a-beginner\/","url_meta":{"origin":93629,"position":1},"title":"React or Angular &#8211; Which is best for a beginner?","author":"ADMEC Multimedia Institute","date":"March 22, 2021","format":false,"excerpt":"Hey there fellow developers, how you doing? If you are learning JavaScript or front end web development you might have heard in the market there's a library and a framework competing for giving a better solution to the developer for single page application development","rel":"","context":"In &quot;Web Design&quot;","block_context":{"text":"Web Design","link":"https:\/\/www.admecindia.co.in\/category\/web-design\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2021\/03\/Which-Is-best-for-a-beginner-ReactJS-or-Angular.jpg?fit=1200%2C667&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2021\/03\/Which-Is-best-for-a-beginner-ReactJS-or-Angular.jpg?fit=1200%2C667&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2021\/03\/Which-Is-best-for-a-beginner-ReactJS-or-Angular.jpg?fit=1200%2C667&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2021\/03\/Which-Is-best-for-a-beginner-ReactJS-or-Angular.jpg?fit=1200%2C667&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2021\/03\/Which-Is-best-for-a-beginner-ReactJS-or-Angular.jpg?fit=1200%2C667&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":613,"url":"https:\/\/www.admecindia.co.in\/web-design\/5-best-performance-tips-angular-developers\/","url_meta":{"origin":93629,"position":2},"title":"5 Best Performance Tips for Angular Developers","author":"ADMEC Multimedia Institute","date":"September 2, 2019","format":false,"excerpt":"Hey there folks, I am Abhishek Sinha\u00a0pursuing\u00a0Web Master Plus course, just completed another popular content in programming i.e. Angular (A JavaScript Framework) from\u00a0ADMEC Multimedia Institute, New Delhi. And as usual, I was given a blog to explain my own views, this time on Angular. The topic of the blog is\u2026","rel":"","context":"In &quot;Web Design&quot;","block_context":{"text":"Web Design","link":"https:\/\/www.admecindia.co.in\/category\/web-design\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2019\/09\/admec-internal-5-tip-for-angular-1.jpg?fit=1200%2C667&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2019\/09\/admec-internal-5-tip-for-angular-1.jpg?fit=1200%2C667&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2019\/09\/admec-internal-5-tip-for-angular-1.jpg?fit=1200%2C667&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2019\/09\/admec-internal-5-tip-for-angular-1.jpg?fit=1200%2C667&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2019\/09\/admec-internal-5-tip-for-angular-1.jpg?fit=1200%2C667&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":676,"url":"https:\/\/www.admecindia.co.in\/web-design\/angular-10-minutes-installation-and-deployment\/","url_meta":{"origin":93629,"position":3},"title":"Angular- 10 Minutes Installation and Deployment","author":"ADMEC Multimedia Institute","date":"December 16, 2019","format":false,"excerpt":"You must have heard of SPA, i.e., Single Page Applications. The best framework that programmers feel to create them is Angular. It is a JavaScript framework with a long history. Let's roll down through the timeline of this amazing framework and know everything about it. It all started in 2009\u2026","rel":"","context":"In &quot;Web Design&quot;","block_context":{"text":"Web Design","link":"https:\/\/www.admecindia.co.in\/category\/web-design\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2018\/11\/angular-7-features-1-e1581309752743.jpg?fit=1200%2C672&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2018\/11\/angular-7-features-1-e1581309752743.jpg?fit=1200%2C672&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2018\/11\/angular-7-features-1-e1581309752743.jpg?fit=1200%2C672&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2018\/11\/angular-7-features-1-e1581309752743.jpg?fit=1200%2C672&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2018\/11\/angular-7-features-1-e1581309752743.jpg?fit=1200%2C672&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":72006,"url":"https:\/\/www.admecindia.co.in\/web-development\/what-is-firebase-and-how-to-use-it-with-angular\/","url_meta":{"origin":93629,"position":4},"title":"What is Firebase and how to use it with Angular?","author":"ADMEC Multimedia","date":"February 26, 2024","format":false,"excerpt":"Firebase is a ready-to-use backend service from Google. Angular and Firebase can work with the help of a few configurations only. Angular developers can create full apps with a database and login system with the help of Firebase. Let's dive deeper into the topic. Introduction to Firebase Google has prepared\u2026","rel":"","context":"In &quot;Web Development&quot;","block_context":{"text":"Web Development","link":"https:\/\/www.admecindia.co.in\/category\/web-development\/"},"img":{"alt_text":"Connecting Firebase with Angular","src":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2024\/02\/connecting-firebase-with-angular.jpg?fit=1200%2C667&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2024\/02\/connecting-firebase-with-angular.jpg?fit=1200%2C667&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2024\/02\/connecting-firebase-with-angular.jpg?fit=1200%2C667&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2024\/02\/connecting-firebase-with-angular.jpg?fit=1200%2C667&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2024\/02\/connecting-firebase-with-angular.jpg?fit=1200%2C667&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":90500,"url":"https:\/\/www.admecindia.co.in\/programming-languages\/mern-and-mean-stacks-tools-for-modern-web-development\/","url_meta":{"origin":93629,"position":5},"title":"MERN and MEAN Stacks \u2013 Tools for Modern Web Development","author":"ADMEC Multimedia Institute","date":"February 17, 2025","format":false,"excerpt":"Both MEAN and MERN stacks are full-stack JavaScript frameworks. The MERN is a stack of MongoDB, Express.js, React.js, and Node.js while MEAN is of MongoDB, Express.js, Angular, and Node.js. Both have a major impact on how the web applications are developed nowadays. These stacks are popular among the community and\u2026","rel":"","context":"In &quot;Programming Languages&quot;","block_context":{"text":"Programming Languages","link":"https:\/\/www.admecindia.co.in\/category\/programming-languages\/"},"img":{"alt_text":"mean and mern stack courses","src":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2025\/02\/create-a-banner-on-mean-and-mern-stack-add-logo-2.jpg?fit=1024%2C768&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2025\/02\/create-a-banner-on-mean-and-mern-stack-add-logo-2.jpg?fit=1024%2C768&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2025\/02\/create-a-banner-on-mean-and-mern-stack-add-logo-2.jpg?fit=1024%2C768&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.admecindia.co.in\/wp-content\/uploads\/2025\/02\/create-a-banner-on-mean-and-mern-stack-add-logo-2.jpg?fit=1024%2C768&ssl=1&resize=700%2C400 2x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.admecindia.co.in\/wp-json\/wp\/v2\/posts\/93629","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.admecindia.co.in\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.admecindia.co.in\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.admecindia.co.in\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.admecindia.co.in\/wp-json\/wp\/v2\/comments?post=93629"}],"version-history":[{"count":0,"href":"https:\/\/www.admecindia.co.in\/wp-json\/wp\/v2\/posts\/93629\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.admecindia.co.in\/wp-json\/wp\/v2\/media\/42302"}],"wp:attachment":[{"href":"https:\/\/www.admecindia.co.in\/wp-json\/wp\/v2\/media?parent=93629"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.admecindia.co.in\/wp-json\/wp\/v2\/categories?post=93629"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.admecindia.co.in\/wp-json\/wp\/v2\/tags?post=93629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}