Servicios y módulo HTTP en Angular 2 Final

Los servicios en Angular 2 son clases que básicamente nos van a servir para realizar acciones concretas, por ejemplo proveer de datos al componente, hacer peticiones al servidor, o realizar una lógica compleja fuera del componente.

Crear un servicio básico en Angular 2

Veamos como crear un servicio en Angular 2.

// importamos el modulo Injectable de AngularJS
import { Injectable } from '@angular/core';

// Permitimos que este objeto se pueda inyectar con la DI
@Injectable()
export class PeliculasService {

  // Definimos un método que recibe un parámetro y devuelve un string
  getPelicula(puntuacion: number) {
    let pelicula = "Batman v Superman - Puntuación: "+puntuacion;
    return pelicula;
  }

}

Ahora vamos a utilizar el servicio en nuestro componente principal.

// Importar el núcleo de Angular
import {Component} from '@angular/core';

// Importamos la clase del servicio
import {PeliculasService} from './services/peliculas.service';
 
/* Decorador component, indicamos en que etiqueta se va a cargar la plantilla, y le indicamos que como provider utilice el servicio que hemos creado */
@Component({
    selector: 'my-app',
    template: `
                <h1>{{pelicula_conseguida}}</h1>
	`,
    providers:[PeliculasService]
})
 
// Clase del componente donde irán los datos y funcionalidades
export class AppComponent { 
	
	public pelicula;
        public pelicula_conseguida;
	
        // Definimos una propiedad para el servicio y se la pasamos al constructor
	constructor(private _peliculasService: PeliculasService){
		this.pelicula = {id: 1, titulo: "La verdad duele", anio: 2016};

                // Llamamos al método del servicio
                this.pelicula_conseguida = this._peliculasService.getPelicula(8);
	}

}

Si abrimos la aplicación en el navegador nos mostrará el texto que devuelve el método del servicio.

Con esto ya sabemos crear un servicio y usarlo de forma básica en Angular 2.

Módulo HTTP y peticiones AJAX en Angular 2

Veamos ahora como utilizar el cliente HTTP y ver como hacer peticiones AJAX en Angular 2. Vamos directos a la práctica.

Modificamos el fichero app.module.ts para añadir el módulo HTTP y cargarlo en la aplicación de forma global.

import { NgModule }       from '@angular/core';
import { BrowserModule }  from '@angular/platform-browser';
import { FormsModule }    from '@angular/forms';

// Importamos el módulo http del paquete http de Angular
import { HttpModule, JsonpModule } from '@angular/http';

import { AppComponent }       from './app.component';
import { routing, appRoutingProviders } from './app.routing';

import { PaisesComponent }    from './components/paises.component';

// Se lo pasamos a imports para que lo cargue en la aplicación
@NgModule({
  imports: [
    BrowserModule,
    FormsModule,
    routing,
    HttpModule
  ],
  declarations: [
    AppComponent,
    PaisesComponent
  ],
  providers: [
    appRoutingProviders
  ],
  bootstrap: [ AppComponent ]
})

export class AppModule {
}

Ahora vamos a crear un servicio para tener dentro métodos que interactuen con un api o que hagan peticiones ajax.

// importamos el modulo Injectable de AngularJS
import { Injectable } from '@angular/core';

// Importamos los componentes que vamos a usar
import {Http, Response, Headers} from "@angular/http";
import "rxjs/add/operator/map";
import {Observable} from "rxjs/Observable";
 
// Permitimos que este objeto se pueda inyectar con la DI
@Injectable()
export class PaisesService {
 
   constructor(private _http: Http){}

   getPosts(){
        // petición por get a esa url de un api rest de pruebas
	return this._http.get("https://jsonplaceholder.typicode.com/posts")
							.map(res => res.json());
   }
	
 
}

Ahora definimos nuestro componente y utilizamos el servicio, también podriamos cargarlo en los providers del app.module.ts dentro del decorador @NgModule.

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

// Importamos la clase del servicio
import {PaisesService} from '../services/paises.service';

@Component({
  selector: 'paises',
  template: `
    <h2>Paises</h2>
    <ul>
    	<li>España</li>
    	<li>Mexico</li>
    	<li>Colombia</li>
    </ul>
    `,
    providers:[PaisesService]
})

export class PaisesComponent { 

    public posts;

    // cargamos el servicio
    constructor(private _paisesService: PaisesService){
       
 
                // Llamamos al método del servicio
                this._paisesService.getPosts()
									.subscribe(
										result => {
												this.posts = result;

												console.log(this.posts);
										},
										error => {
											this.errorMessage = <any>error;
											
											if(this.errorMessage !== null){
												console.log(this.errorMessage);
												alert("Error en la petición");
											}
										}
									);
    }
}

Este método nos mostrará un console log con todos los objetos que nos devuelve el servicio, que ya podríamos recorrer y mostrar en nuestra plantilla.

Esto es todo, ya sabemos usar de forma básica los servicios, el cliente http y como hacer peticiones AJAX con Angular 2.

Víctor Robles WEB

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post