Consumir APi en IONIC con Angular
2.- Ir a la carpeta del proyecto: cd demoAPI
3.- Generar las plataformas para el proyecto: 
ionic cordova platform add androidionic cordova platform add ios
4.- Buscamos el archivo, app.module.ts y agregar la dependencia HttpClient, usando la libreria HttpClientModule, como se muestra a continuación:
...
import { HttpClientModule } from '@angular/common/http';
@NgModule({
  declarations: [
    MyApp
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    IonicModule.forRoot(MyApp),
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp
  ],
  providers: [...]
})
export class AppModule {}
5.- Usamos nuevamente la consola e ingresamos el siguiente comando para crear un Servicio para acceder a la api y poderla usar en los modulos del proyecto: ionic g service api-module  
ionic creará un archivo api-module.service.ts en el cual agregaremos la librería httpClient
import { Injectable } from '@angular/core';
/*Se agrega httpClient y httpHeaders */
import { HttpClient, HttpHeaders  } from '@angular/common/http';
Luego se debe registrar la variable http en el constructor de la clase:
. . .  
constructor(
    private http: HttpClient    
    ) { }
. . .
Código Completo de api-module.service.ts 
import { Injectable } from '@angular/core';
/* libreria a agregar httpClient */
import { HttpClient, HttpHeaders  } from '@angular/common/http';
@Injectable({
  providedIn: 'root'
})
export class ApiModuleService {
  url = "https://jsonplaceholder.typicode.com/";
  respuesta: any;
  constructor(
    private http: HttpClient    
    ) { }
  //devuelve lista de post
  getData_byGET() {    
    const header = new HttpHeaders ().set('Access-Control-Allow-Origin', '*')
      .set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT')
      .set('Accept', 'application/json')
      .set('Content-Type', 'application/json; charset=utf-8')
      //.set('Authorization', localStorage.getItem("Token_Full").toString())
      //.set('Authorization', 'Bearer ' + localStorage.getItem("Token_Full").toString())
      ;
    return this.http.get(this.url+'post');
  }
  async login(postData){
    const header = new HttpHeaders ().set('Access-Control-Allow-Origin', '*')
    .set('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT')
    .set('Accept', 'application/json')
    .set('Content-Type', 'application/json; charset=utf-8')
    .set('responseType','text');
    var datos={ Username: postData.form.value.Username, Password:postData.form.value.Password};
    var handleError: any;
    //https
    this.respuesta= this.http.post(this.url+'login', JSON.stringify(datos), { headers: header })
    .toPromise()
    .then(response => response as any)
    .catch(handleError => handleError as any);
    return this.respuesta;
  }
}
Para usar el servicio debe crear un page por medio de la consola: ionic generate page consume-api, esto generara un directorio con los archivos de la vista y debera buscar en consume-api.module.ts y luego de abierto colocar la referencia del servicio:
import { Component, OnInit } from '@angular/core';
//libreria a agregar
import { ApiModuleService } from '../api-module.service';
//********************
import { NavController } from '@ionic/angular';
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
Código de consume-api.ts
import { Component, OnInit } from '@angular/core';
import { ApiModuleService } from '../apirio.service';
import { NavController } from '@ionic/angular';
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
@Component({
  selector: 'app-habladores',
  templateUrl: './habladores.page.html',
  styleUrls: ['./habladores.page.scss'],
})
export class ConsumeApiPage implements OnInit {
  public items;
  constructor(
    public apiMod: ApiModuleService,
    public navCtrl: NavController,
    private iab: InAppBrowser    
  ) { }
  ngOnInit() {
    this.apiMod.getHabladores()
    .subscribe(
      (data) => { // Success        
        this.items= data;        
      },
      (error) =>{
        console.error(error);
      }
    )    
  }
  getItems(ev: any) {
    // set val to the value of the searchbar
    const val = ev.target.value;
    // if the value is an empty string don't filter the items
    if (val && val.trim() != '') {
      if(Number.isInteger(val)){
        this.items= this.items.filter((item) => {
          return (item.Codigo.toLowerCase().indexOf(val.toLowerCase()) > -1);
        })
      }else{
        this.items= this.items.filter((item) => {
          return (item.Descripcion.toLowerCase().indexOf(val.toLowerCase()) > -1);
        })
      }
    }else{
      // Reset items back to all of the items
      this.ngOnInit();
    }
  } 
}


Comentarios