En Angular 5 han introducido un nuevo módulo para hacer peticiones HTTP y hacer peticiones a servicios REST. Este nuevo módulo es HttpClient y no sustituye al HttpModule que ya existía en Angular 4, ambos módulos convivirán. En teoría este HttpClient en Angular 7 tiene un poco más de rendimiento y nos ahorra escribir algunos caracteres.
Este nuevo módulo es la única novedad significativa entre Angular en su ultima versión.
Vamos a ver como usar el nuevo HttpClient en Angular.
Configuración del módulo HttpClient
Lo primero que debemos hacer es importar este módulo HttpClient en el fichero app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
// Importar HttpClientModule
import {HttpClientModule} from '@angular/common/http';
@NgModule({
declarations: [
AppComponent,
HomeComponent,
ErrorComponent,
ProductosListComponent,
ProductoAddComponent,
ProductoDetailComponent,
ProductoEditComponent
],
imports: [
BrowserModule,
FormsModule,
HttpClientModule, // cargamos el módulo en el array de imports
],
providers: [
appRoutingProviders
],
bootstrap: [AppComponent]
})
export class AppModule { }
Ahora ya podemos usar el HttpClient en cualquier componente de nuestra aplicación, pero nosotros vamos a ir un poquito mas allá y vamos a usarlo en un servicio de Angular 7.
En el servicio debemos importar HttpClient(para hacer las peticiones al API REST por AJAX) y HttpHeaders(para establecer cabeceras en las peticiones):
import {HttpClient, HttpHeaders} from '@angular/common/http';
Despues tenemos que inyectar el objeto HttpClient en una propiedad de la clase, podemos hacerlo en el constructor:
constructor(
public http: HttpClient
){}
Y ahora ya podemos hacer peticiones al API REST usando el HttpClient en Angular 7.
Petición GET
Para hacer una petición usando el método HTTP GET, vamos a crear un método que haga la petición:
getProductos(): Observable<any>{
return this.http.get(this.url+'productos');
}
Es importante indicarle al método que devolverá un Observable y el tipo de dato que devolverá el observable al hacer el subscribe, si el api rest devuelve un objeto que no corresponde 100% con los modelos que tengas en Angular, es mejor indicarle el tipo any.
En el componente podríamos llamar a este método del servicio de la siguiente manera:
this._productoService.getProductos().subscribe(
result => {
if(result.code != 200){
console.log(result);
}else{
this.productos = result.data;
}
},
error => {
console.log(<any>error);
}
);
Petición POST
Ahora haremos una llamada por POST al backend, crearemos un método en nuestro servicio:
addProducto(producto: Producto): Observable<any>{
let json = JSON.stringify(producto);
//El backend recogerá un parametro json
let params = "json="+json;
//Establecemos cabeceras
let headers = new HttpHeaders().set('Content-Type','application/x-www-form-urlencoded');
return this.http.post(this.url+'productos', params, {headers: headers});
}
En este ejemplo hemos visto como establecer y enviar cabeceras en las peticiones AJAX.
Código del servicio de Angular usando HttpClient
El servicio quedaría así:
import { Injectable } from '@angular/core';
import {HttpClient, HttpHeaders} from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { Producto } from '../models/producto';
import { GLOBAL } from './global';
@Injectable()
export class ProductoService{
public url: string;
constructor(
public http: HttpClient
){
this.url = GLOBAL.url;
}
getProductos(): Observable<any>{
return this.http.get(this.url+'productos');
}
addProducto(producto: Producto): Observable<any>{
let json = JSON.stringify(producto);
let params = "json="+json;
let headers = new HttpHeaders().set('Content-Type','application/x-www-form-urlencoded');
return this.http.post(this.url+'productos', params, {headers: headers});
}
}
Con esto ya sabemos usar el módulo HttpClient de Angular 7 en nuestro proyectos, prácticamente es igual que el anterior módulo Http que teníamos en Angular 4, que sigue estando en Angular 5, esto simplemente es una alternativa al HttpModule.
Más información:
Documentación HTTPClient













