Ionic 2 y Angular 2 – Segunda parte

Si quieres saber de que va esto, lee la primera parte.

La siguiente habilidad o conocimiento que tenía que obtener era saber llamar a una API externa para obtener unos datos.

Antes de crear un servicio, lo cual abordaré en la tercera parte, hay que saber lo más básico de todo: ¿cómo puedo hacer una llamada HTTP a una URL?

Para ello tiraremos de Angular y del módulo http:

import {Http} from '@angular/http';

Como mi idea desde el principio era hacer todo modular y poder abstraerme de las llamadas, lo que hice fue crear un componente que llamé Query y que será el que utilice para realizar las llamadas a la API externa:

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

@Injectable()
export class Query {

  constructor(private http: Http) {
    this.http = http;
  }

  get(url, mapper) {
    return this.http.get(url).map(data => mapper(data));
  }

  post(url, params, mapper) {
    return this.http.post(url, params).map(data => mapper(data));
  }
}

Dentro de la clase Query he se ven tres métodos:

  • constructor
  • get
  • post

El primero es el constructor de la clase, lo más interesante de él es definir las variables que recibe, las cuales son lo que antes hacíamos antes en ionic 1 al inyectar variables en el constructor del controlador. Por tanto aquí lo que estamos haciendo es definir la variable http que será de tipo Http. Después para poder usarla en el resto de métodos fuera del constructor lo que hacemos es asignarlo a this, que en este caso es la propia instancia de la clase.

Los otros dos métodos son llamadas de tipo GET y POST. Aquí cabe destacar el parámetro mapper, el cual lo voy a usar para formatear los datos que llegan de la API por si quiero hacer una transformación antes de usar los datos en la app.

Con todo esto, la manera de hacer una llamada sería la siguiente:


import { Query } from './query';

export class MiClase {
  constructor(private query: Query) {
    query.get('http://miapi.com/v1/metodo', (e) => e).subscribe(datos => this.datos = datos);
  }
};

Se puede ver en el ejemplo que en vez de usar promesas, ahora Angular usa Observables, que según dicen son mejores que las promesas, por tanto http devuelve un Observable al que hay que subscribirse para poder recoger los datos.

Por hoy ya es suficiente, en la próxima parte crearemos un servicio que haga uso de Query.