Form Handling

Let’s add a form to the UserComponent to allow adding new users. We’ll use Angular’s Reactive Forms module for this purpose.

Generate a New Component

ng generate component add-user

Import ReactiveFormsModule

Update src/app/app.module.ts to import ReactiveFormsModule:

import { ReactiveFormsModule } from '@angular/forms';

@NgModule({
  imports: [
    BrowserModule,
    AppRoutingModule,
    HttpClientModule,
    ReactiveFormsModule
  ],
})
export class AppModule { }

Create the Add User Form

Modify src/app/add-user/add-user.component.ts to create a form:

import { Component } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { UserService } from '../user.service';

@Component({
  selector: 'app-add-user',
  template: `
    <h1>Add User</h1>
    <form [formGroup]="userForm" (ngSubmit)="onSubmit()">
      <label for="name">Name:</label>
      <input id="name" formControlName="name">
      <div *ngIf="userForm.controls.name.invalid && userForm.controls.name.touched">
        Name is required.
      </div>
      
      <label for="email">Email:</label>
      <input id="email" formControlName="email">
      <div *ngIf="userForm.controls.email.invalid && userForm.controls.email.touched">
        Valid email is required.
      </div>
      
      <button type="submit" [disabled]="userForm.invalid">Add User</button>
    </form>
  `
})
export class AddUserComponent {
  userForm: FormGroup;

  constructor(private fb: FormBuilder, private userService: UserService) {
    this.userForm = this.fb.group({
      name: ['', Validators.required],
      email: ['', [Validators.required, Validators.email]]
    });
  }

  onSubmit() {
    if (this.userForm.valid) {
      this.userService.addUser(this.userForm.value).subscribe(() => {
        alert('User added successfully!');
        this.userForm.reset();
      });
    }
  }
}

Add a Method to UserService

Update src/app/user.service.ts to include a method for adding users:

addUser(user: any): Observable<any> {
  return this.http.post<any>(this.apiUrl, user);
}

Add Route for Add User Component

Update src/app/app-routing.module.ts:

import { AddUserComponent } from './add-user/add-user.component';

const routes: Routes = [
  { path: '', component: HomeComponent },
  { path: 'about', component: AboutComponent },
  { path: 'user', component: UserComponent },
  { path: 'add-user', component: AddUserComponent }
];

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *