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.













