A Complete Guide - Angular Making HTTP Calls with HttpClient
Angular Making HTTP Calls with HttpClient: Detailed Explanation and Important Information
Setting Up HttpClient
Before you can use HttpClient, you need to import it into your Angular application. This is typically done in the AppModule or a specific feature module. Here is how to import and configure it:
// Import HttpClientModule from Angular core
import { HttpClientModule } from '@angular/common/http';
// In your app module import the HttpClientModule
@NgModule({
declarations: [...],
imports: [
BrowserModule,
HttpClientModule, // Add HttpClientModule here
...
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Basic HTTP Calls
With HttpClient imported, you can make HTTP requests. Here’s how to make simple GET, POST, PUT, and DELETE requests:
// Import HttpClient from Angular core
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
@Injectable({ providedIn: 'root' })
export class DataService {
private apiUrl = '
constructor(private http: HttpClient) {}
// GET request
getData() {
return this.http.get<any[]>(`${this.apiUrl}`);
}
// POST request
postData(item: any) {
return this.http.post<any>(`${this.apiUrl}`, item);
}
// PUT request
putData(id: number, updatedItem: any) {
return this.http.put<any>(`${this.apiUrl}/${id}`, updatedItem);
}
// DELETE request
deleteData(id: number) {
return this.http.delete<any>(`${this.apiUrl}/${id}`);
}
}
Handling Responses
Angular’s HttpClient methods return Observable objects, making it easy to handle responses using RxJS operators. Here’s how to subscribe to the observables returned from these methods:
import { Observable } from 'rxjs';
import { map, catchError } from 'rxjs/operators';
// Component or another service that uses DataService
@Component({ ... })
export class MyComponent {
data: any[] = [];
constructor(private dataService: DataService) {}
ngOnInit() {
this.dataService.getData()
.subscribe(
(response: any[]) => {
this.data = response;
},
error => {
console.error('There was an error!', error);
}
);
}
}
Interceptors
Interceptors are powerful tools in Angular for modifying HTTP requests and responses globally. You can use them for tasks like adding authentication headers or intercepting errors.
Here’s an example of intercepting a request to add an Authorization header:
- Create an Interceptor
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable()
export class TokenInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const token = localStorage.getItem('auth_token');
if (token) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${token}`
}
});
}
return next.handle(request);
}
}
- Register the Interceptor
import { HTTP_INTERCEPTORS } from '@angular/common/http';
@NgModule({
providers: [
...
{ provide: HTTP_INTERCEPTORS, useClass: TokenInterceptor, multi: true },
...
]
})
export class AppModule { }
Error Handling
Proper error handling is crucial when working with HTTP requests. Use RxJS operators such as catchError to handle errors gracefully.
import { throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';
public getRequestFailed() {
return this.http.get('
.pipe(
catchError(this.handleError)
);
}
private handleError(error: any) {
// Log the error to console
console.error('Server Error:', error);
// Throw an error observable
return throwError('Server Error');
}
Summary
Angular’s HttpClient module offers an efficient and robust way to work with HTTP in Angular applications. Setting up HttpClient, making HTTP requests, handling responses, using interceptors, and managing errors are key to leveraging HttpClient effectively. By following these practices, you can create robust and maintainable Angular applications that smoothly interact with backend services.
Online Code run
Step-by-Step Guide: How to Implement Angular Making HTTP Calls with HttpClient
Step 1: Set up Your Angular Project
Install Angular CLI (if not already installed):
npm install -g @angular/cliCreate a new Angular project:
ng new my-angular-http-app cd my-angular-http-appServe the application to verify it's working:
ng serveOpen your browser and go to
You should see the default Angular app.
Step 2: Generate a New Component
Let's create a component that will handle HTTP calls.
ng generate component data-fetcher
This command will generate a new component named DataFetcherComponent.
Step 3: Import HttpClientModule
Before you can make HTTP requests, you need to import HttpClientModule in your AppModule.
Open src/app/app.module.ts and modify it as follows:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { DataFetcherComponent } from './data-fetcher/data-fetcher.component';
import { HttpClientModule } from '@angular/common/http';
@NgModule({
declarations: [
AppComponent,
DataFetcherComponent
],
imports: [
BrowserModule,
HttpClientModule // Add HttpClientModule here
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Step 4: Inject HttpClient into Your Component
Open src/app/data-fetcher/data-fetcher.component.ts and modify it as follows:
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-data-fetcher',
templateUrl: './data-fetcher.component.html',
styleUrls: ['./data-fetcher.component.css']
})
export class DataFetcherComponent implements OnInit {
data: any;
error: any;
constructor(private http: HttpClient) { }
ngOnInit(): void {
this.fetchData();
}
fetchData(): void {
const url = '
this.http.get(url).subscribe(
response => {
this.data = response;
console.log('Data fetched successfully:', this.data);
},
error => {
this.error = error;
console.error('Error fetching data:', this.error);
}
);
}
}
Step 5: Update the Template
Open src/app/data-fetcher/data-fetcher.component.html and update it as follows:
<div *ngIf="data; else loading">
<h2>Fetched Data:</h2>
<ul>
<li *ngFor="let post of data">
<h3>{{ post.title }}</h3>
<p>{{ post.body }}</p>
</li>
</ul>
</div>
<ng-template #loading>
<p>Loading data...</p>
</ng-template>
<div *ngIf="error">
<h2>Error:</h2>
<p>{{ error.message }}</p>
</div>
Step 6: Use the DataFetcherComponent in Your Main Application Template
Open src/app/app.component.html and update it to include the DataFetcherComponent:
<app-data-fetcher></app-data-fetcher>
Step 7: Run Your Application
Run your Angular application again to see the HTTP call in action:
ng serve
Navigate to in your browser. You should see the list of posts fetched from the JSONPlaceholder API.
Summary
In this example, we:
- Set up a new Angular project.
- Created a new component named
DataFetcherComponent. - Imported
HttpClientModuleto enable HTTP communication. - Injected
HttpClientinto our component. - Made a GET request to fetch data from a public API.
- Displayed the fetched data or an error message in the component's template.
Login to post a comment.