Skip to main content

Angular Project from Scratch, Employee management project in Angular 11,...

    

            Welcome To Testy Codeiz            

Hello folks, today I am going to show you how you can consume RESTful API in Angular 11 using HttpClient service. HttpClient service is a very useful API in Angular to communicate with the remote server.

This Angular 11 Projects feature

·         Observable Support

·         Hassle Free API Testing

·         Smooth Requests & Response Mechanism

·         Better Error Handling

{   HttpClient is an injectable service, it comes with the various powerful methods to communicate with the remote server. HttpClient API can send Http POST, GET, PUT and DELETE requests easily.   }

I’ll be showing you the practical examples of standard HTTP methods like GET, PUT, POST and DELETE, these methods allow you to communicate with a REST API server.

By the end of this tutorial, you’ll be able to understand. How to set up the HttpClientModule in Angular app? make a request using a local server with JSON server NPM package, and how to make GET, POST, PUT & DELETE request with Angular using HttpClient API.

Angular 11 project Setup

·         Install Angular CLI

·         Configure Fake JSON Server in Angular

·         Enable Routing Service in Angular

·         Configure Angular HttpClient

·         Create Angular Service for Consuming RESTful API using Angular HttpClient API

·         Access HttpClient API from Angular Component

·         Send HTTP GET and DELETE Requests in Angular to Manage Data

·         Make HTTP PUT Request in Angular to Update Data

                    npm install @angular/cli -g

 

·         I will be creating an employee record management system with Angular, in this demo app i will consume RESTful API via HttpClient service.

·         It’s time to setup Angular project, run the following command in Angular CLI.

                ng new projectName

 

·         It will ask you the following questions…

·         Would you like to add Angular routing?
Select y and Hit Enter.

·         Which stylesheet format would you like to use? (Use arrow keys)
Choose CSS and hit Enter

·         After that your project will start creating, Once the project is created then don’t forget to get into the project’s folder.

cd  Project Name..

I’ll be using Bootstrap 4 CSS framework with Angular for consuming RESTful API with HttpClient service. Hit the following command to get the Bootstrap in your Angular app.

npm install bootstrap

After that, Go to angular.json file and replace the given below code with “styles”: [ ] array.

"styles": [

            "node_modules/bootstrap/dist/css/bootstrap.min.css",

            "src/styles.css"

          ]

Generate components for Angualr 11 project

ü  ng g c employee-create

ü  ng g c employee-edit

ü  ng g c employee-list

Configure JSON Server in Angular 11

We are going to create a fake server for testing our Angular app, so we will be taking help of json-server NPM package to sort out our problem.

Install JSON server in our project, run the following command in Angular CLI.

npm i json-server –save

Then, create a folder by the name of server and keep your database file in it to manage the APIs locally.

mkdir server && cd server

touch server/db.json

Once the db.json file is created then add some data in it.

{

  "employees": [{

    "id": 1,

    "name": "Tony Stark",

    "email": "tony@mcu.com",

    "phone": "001-123-4567"

  }, {

    "id": 2,

    "name": "Black Widow",

    "email": "black-widow@mcu.com",

    "phone": "001-123-4568"

  }]

}

 

After that run the following command to run the JSON server.

json-server --watch server/db.json

Now if you make any request with Angualr 11 Http post, put, get or delete your db.json file will get updated locally.

You can check your local db.json file on this URL http://localhost:3000/employees.

 

Enable Routing Service in Angular 11

 

For navigating between components in Angular we need to activate routing service in our application, to enable routes go to app-routing.module.ts file and add the following code.

 

import { NgModule } from '@angular/core';

import { Routes, RouterModule } from '@angular/router';

import { EmployeeCreateComponent } from './employee-create/employee-create.component';

import { EmployeeEditComponent } from './employee-edit/employee-edit.component';

import { EmployeesListComponent } from './employees-list/employees-list.component';

 

const routes: Routes = [

  { path: '', pathMatch: 'full', redirectTo: 'create-employee' },

  { path: 'create-employee', component: EmployeeCreateComponent },

  { path: 'employees-list', component: EmployeesListComponent },

  { path: 'employee-edit/:id', component: EmployeeEditComponent } 

];

 

@NgModule({

  imports: [RouterModule.forRoot(routes)],

  exports: [RouterModule]

})

 

export class AppRoutingModule { }

 

 

 

Import HttpClient API

In this tutorial, I will give you the demo to access the external server to fetch the data using the RESTful API in Angular with HttpClient service. In order to use HttpClient API to make the communication with Http remote server, you must set up this service in your Angular app.

Go to app.module.ts and paste the following code.

 

import { HttpClientModule } from '@angular/common/http';

 

 

Include the HttpClientModule in @NgModule's imports array.

 

@NgModule({

  imports: [

    HttpClientModule

   ]

})

 

You’ve injected the HttpClientModule in your application, now you can use it easily in Angular app.

 

Create Angular Service

In order to create consume RESTful API using Angular 11 HttpClient service we need to create a service file in our app. This file will hold the core logic of our demo application.

Functionalities to be covered:

·         Create Employee

·         Delete Employee

·         Update Employee

·         Manage Employee List

 

In order to create CRUD operations using RESTful API in Angular, we need to generate employee.ts class and rest-api.service.ts files.

 

Next, generate employee interface class:

 

ng g cl shared/Employee

 

Go to shared/employee.ts and define data types within the Employee class.

 

export class Employee {

   id: string;

   name: string;

   email: string;

   phone: number;

}

 

Next, generate RestApiService class:

ng g s shared/rest-api

 

I will be writing down core logic in this file for consuming RESTful API using HttpClient API. We will also use RxJS to handle asynchronous operations and errors in this demo app.

Let’s go to shared/rest-api.service.ts file and add the following code.

 

import { Injectable } from '@angular/core';

import { HttpClient, HttpHeaders } from '@angular/common/http';

import { Employee } from '../shared/employee';

import { Observable, throwError } from 'rxjs';

import { retry, catchError } from 'rxjs/operators';

 

@Injectable({

  providedIn: 'root'

})

 

export class RestApiService {

 

  // Define API

  apiURL = 'http://localhost:3000';

 

  constructor(private http: HttpClient) { }

 

  /*========================================

    CRUD Methods for consuming RESTful API

  =========================================*/

 

  // Http Options

  httpOptions = {

    headers: new HttpHeaders({

      'Content-Type': 'application/json'

    })

  } 

 

  // HttpClient API get() method => Fetch employees list

  getEmployees(): Observable<Employee> {

    return this.http.get<Employee>(this.apiURL + '/employees')

    .pipe(

      retry(1),

      catchError(this.handleError)

    )

  }

 

  // HttpClient API get() method => Fetch employee

  getEmployee(id): Observable<Employee> {

    return this.http.get<Employee>(this.apiURL + '/employees/' + id)

    .pipe(

      retry(1),

      catchError(this.handleError)

    )

  } 

 

  // HttpClient API post() method => Create employee

  createEmployee(employee): Observable<Employee> {

    return this.http.post<Employee>(this.apiURL + '/employees', JSON.stringify(employee), this.httpOptions)

    .pipe(

      retry(1),

      catchError(this.handleError)

    )

  } 

 

  // HttpClient API put() method => Update employee

  updateEmployee(id, employee): Observable<Employee> {

    return this.http.put<Employee>(this.apiURL + '/employees/' + id, JSON.stringify(employee), this.httpOptions)

    .pipe(

      retry(1),

      catchError(this.handleError)

    )

  }

 

  // HttpClient API delete() method => Delete employee

  deleteEmployee(id){

    return this.http.delete<Employee>(this.apiURL + '/employees/' + id, this.httpOptions)

    .pipe(

      retry(1),

      catchError(this.handleError)

    )

  }

 

  // Error handling

  handleError(error) {

     let errorMessage = '';

     if(error.error instanceof ErrorEvent) {

       // Get client-side error

       errorMessage = error.error.message;

     } else {

       // Get server-side error

       errorMessage = `Error Code: ${error.status}\nMessage: ${error.message}`;

     }

     window.alert(errorMessage);

     return throwError(errorMessage);

  }

 

}

 

Access HttpClient from Angular Component

 

We’ve successfully created RESTful services using Angular 8/9/10/11 HttpClient API, its time to access rest-api.service.ts via Angular components.

Go to your app.module.ts file and add the following code, this file holds the core services to run our demo app.

 

import { BrowserModule } from '@angular/platform-browser';

import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';

 

// HttpClient module for RESTful API

import { HttpClientModule } from '@angular/common/http';

 

// Routing module for router service

import { AppRoutingModule } from './app-routing.module';

 

// Forms module

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

 

// Components

import { EmployeeCreateComponent } from './employee-create/employee-create.component';

import { EmployeeEditComponent } from './employee-edit/employee-edit.component';

import { EmployeesListComponent } from './employees-list/employees-list.component';

 

@NgModule({

  declarations: [

    AppComponent,

    EmployeeCreateComponent,

    EmployeeEditComponent,

    EmployeesListComponent

  ],

  imports: [

    BrowserModule,

    AppRoutingModule,

    HttpClientModule,

    FormsModule

  ],

  providers: [],

  bootstrap: [AppComponent]

})

 

export class AppModule { }

 

Create Data using Angular 11 HTTP POST Request

Go to employee-create.component.html add the following code.

 

 

<div class="container custom-container">

  <div class="col-md-12">

    <h3 class="mb-3 text-center">Create Employee</h3>

 

    <div class="form-group">

      <input type="text" [(ngModel)]="employeeDetails.name" class="form-control" placeholder="Name">

    </div>

 

    <div class="form-group">

      <input type="text" [(ngModel)]="employeeDetails.email" class="form-control" placeholder="Email">

    </div>

 

    <div class="form-group">

      <input type="text" [(ngModel)]="employeeDetails.phone" class="form-control" placeholder="Phone">

    </div>

 

    <div class="form-group">

      <button class="btn btn-success btn-lg btn-block" (click)="addEmployee()">Create Employee</button>

    </div>

 

  </div>

</div>

 

 

 

Go to employee-create.component.ts file and add the following code.

 

import { Component, OnInit, Input } from '@angular/core';

import { Router } from '@angular/router';

import { RestApiService } from "../shared/rest-api.service";

 

@Component({

  selector: 'app-employee-create',

  templateUrl: './employee-create.component.html',

  styleUrls: ['./employee-create.component.css']

})

export class EmployeeCreateComponent implements OnInit {

 

  @Input() employeeDetails = { name: '', email: '', phone: 0 }

 

  constructor(

    public restApi: RestApiService,

    public router: Router

  ) { }

 

  ngOnInit() { }

 

  addEmployee(dataEmployee) {

    this.restApi.createEmployee(this.employeeDetails).subscribe((data: {}) => {

      this.router.navigate(['/employees-list'])

    })

  }

 

}

 

 

By adding given above code in employee create component, we can easily create an employee by making an HTTP POST request via Angular component.

 

Send HTTP GET and DELETE Requests

In this section i am going to manage employees list which we have created above. I will be using our RESTful API service by sending get() and delete() request via our custom apis.

 

employees-list.component.html

 

<div class="container custom-container-2">

 

  <!-- Show it when there is no employee -->

  <div class="no-data text-center" *ngIf="Employee.length == 0">

    <p>There is no employee added yet!</p>

    <button class="btn btn-outline-primary" routerLink="/create-employee">Add Empoyee</button>

  </div>

 

  <!-- Employees list table, it hides when there is no employee -->

  <div *ngIf="Employee.length !== 0">

    <h3 class="mb-3 text-center">Employees List</h3>

 

    <div class="col-md-12">

      <table class="table table-bordered">

        <thead>

          <tr>

            <th scope="col">User Id</th>

            <th scope="col">Name</th>

            <th scope="col">Email</th>

            <th scope="col">Phone</th>

            <th scope="col">Action</th>

          </tr>

        </thead>

        <tbody>

          <tr *ngFor="let employee of Employee">

            <td>{{employee.id}}</td>

            <td>{{employee.name}}</td>

            <td>{{employee.email}}</td>

            <td>{{employee.phone}}</td>

            <td>

              <span class="edit" routerLink="/employee-edit/{{employee.id}}">Edit</span>

              <span class="delete" (click)="deleteEmployee(employee.id)">Delete</span>

            </td>

          </tr>

        </tbody>

      </table>

    </div>

 

  </div>

 

</div>

 

 

employees-list.component.ts

import { Component, OnInit } from '@angular/core';

import { RestApiService } from "../shared/rest-api.service";

 

@Component({

  selector: 'app-employees-list',

  templateUrl: './employees-list.component.html',

  styleUrls: ['./employees-list.component.css']

})

export class EmployeesListComponent implements OnInit {

 

  Employee: any = [];

 

  constructor(

    public restApi: RestApiService

  ) { }

 

  ngOnInit() {

    this.loadEmployees()

  }

 

  // Get employees list

  loadEmployees() {

    return this.restApi.getEmployees().subscribe((data: {}) => {

      this.Employee = data;

    })

  }

 

  // Delete employee

  deleteEmployee(id) {

    if (window.confirm('Are you sure, you want to delete?')){

      this.restApi.deleteEmployee(id).subscribe(data => {

        this.loadEmployees()

      })

    }

  } 

 

}

Update Data

I am going to send HTTP PUT Request in Angular to update current employee data in our little demo app, It’s pretty simple just follow the following steps.

Update code in employee-edit.component.html:

<div class="container custom-container">

  <div class="col-md-12">

   

    <h3 class="mb-3 text-center">Update Employee</h3>

 

    <div class="form-group">

      <input type="text" [(ngModel)]="employeeData.name" class="form-control" placeholder="Name">

    </div>

 

    <div class="form-group">

      <input type="text" [(ngModel)]="employeeData.email" class="form-control" placeholder="Email">

    </div>

 

    <div class="form-group">

      <input type="text" [(ngModel)]="employeeData.phone" class="form-control" placeholder="Phone">

    </div>

 

    <div class="form-group">

      <button class="btn btn-success btn-lg btn-block" (click)="updateEmployee()">Update Employee</button>

    </div>

   

  </div>

</div>

 

employee-edit.component.ts

import { Component, OnInit } from '@angular/core';

import { RestApiService } from "../shared/rest-api.service";

import { ActivatedRoute, Router } from '@angular/router';

 

@Component({

  selector: 'app-employee-details',

  templateUrl: './employee-edit.component.html',

  styleUrls: ['./employee-edit.component.css']

})

 

export class EmployeeEditComponent implements OnInit {

  id = this.actRoute.snapshot.params['id'];

  employeeData: any = {};

 

  constructor(

    public restApi: RestApiService,

    public actRoute: ActivatedRoute,

    public router: Router

  ) {

  }

 

  ngOnInit() {

    this.restApi.getEmployee(this.id).subscribe((data: {}) => {

      this.employeeData = data;

    })

  }

 

  // Update employee data

  updateEmployee() {

    if(window.confirm('Are you sure, you want to update?')){

      this.restApi.updateEmployee(this.id, this.employeeData).subscribe(data => {

        this.router.navigate(['/employees-list'])

      })

    }

  }

 

}

 

Now you can test your Angular HttpClient application in the browser, just type ng serve in the terminal.

Run Angular Application

Start your project using given below command.

ng serve –open

 

 

Thanku

 

 

 

 

 

 


Comments

Post a Comment

Popular posts from this blog

#Angular 10 #Star #rating example | Star Review System in angular by #Te...

           In this video, we build a five-star review system with #Angular10 . #Angular 10 #Star #rating example | Star Review System in angular by #Testycodeiz . rating system, #Angular 10 #Star #rating example,angular star rating,angular star rating component,star rating in angular,star rating in angular 8,Star Review System in angular,angular by #Testycodeiz ,angular rating,angular rating star,angular 4 star rating,angular 5 star rating,angular 6 star rating,angular 7 star rating,angular 8 star rating,angular 9 star rating sytem,angular 10 star rating system,angular star rating by testy codeiz,testycodeiz angular

#8 how to create RESTful API with nodejs in hindi | PUT method in REST A...

                    how to create #RESTful API with #nodejs in hindi | #PUT method in REST API in #nodejs by Ashish 😮 Use PUT when you want to modify a singular resource which is already a part of resources collection. PUT replaces the resource in its entirety. Use PATCH if request updates part of the resource. Generally, in practice, always use PUT for #UPDATE operations. Handling PUT requests PUT requests will be used to make updates to existing resources. It’s important to note that #PUT is used to replace the entire resource – it doesn’t do partial updates (I will show you how to do this with PATCH in the future).

mongoDB,How to download mongoDB, How to Install MongoDB, MongoDB for Ang...

           mongoDB,How to download mongoDB, How to Install MongoDB, MongoDB for Angular, MongoDB for MEAN Stack, mongoDB download and Install, #MongoDB ​ , #Angular ​ , #Nodejs ​ , Mongodb installation, Mongodb for Angular 11, mongodb for angular 10, mongodb for angular 9, mongodb with Testycodeiz, Mongodb for MEAN, Download MongoDB Link: mongodb.com/try/download/community?tck=docs_server