Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/nfriaa/ionic-tutorial3

Ionic tutorial3 : Appel d'une API de type RESTful et affichage des données.
https://github.com/nfriaa/ionic-tutorial3

android api ionic ionic-framework ionic3 ios node npm restful

Last synced: 13 days ago
JSON representation

Ionic tutorial3 : Appel d'une API de type RESTful et affichage des données.

Awesome Lists containing this project

README

        

# ionic-tutorial3

Ionic tutorial3 : Appel d'une API de type RESTful et affichage des données (liste / détails). L'API utilisée dans ce tutorial est `https://randomuser.me` qui permet d'avoir un ou plusieurs personnes exemples.

[![contributions welcome](https://img.shields.io/badge/contributions-welcome-orange.svg?style=flat)](https://github.com/nfriaa/ionic-tutorial3/issues) [![Build Status](https://travis-ci.org/nfriaa/ionic-tutorial3.svg?branch=master)](https://travis-ci.org/nfriaa/ionic-tutorial3) [![license](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/nfriaa/ionic-tutorial3/blob/master/LICENSE)

![](https://img.shields.io/badge/node-8-red.svg)
![](https://img.shields.io/badge/npm-5-blue.svg)
![](https://img.shields.io/badge/ionic-3-ff69b4.svg)
![](https://img.shields.io/badge/angular-5-orange.svg)
![](https://img.shields.io/badge/typescript-latest-green.svg)
![](https://img.shields.io/badge/editor-vscode-yellow.svg)

## Pour tester cette application en local
```sh
git clone https://github.com/nfriaa/ionic-tutorial3.git
cd ionic-tutorial3
npm install
ionic serve
```

## 1. Créer une nouvelle application Ionic
```sh
ionic start ionic-tutorial3 sidemenu
# puis démarrer dans le navigateur :
ionic serve
```

## 2. Créer le provider
C'est la classe qui va intéragir avec le service Web (RESTful) pour récupérer les données.
```sh
ionic g provider PeopleService
```

- changer le code du fichier `src/providers/people-service/people-service.ts` comme suit :
Nous allons recupérer 5 utilisateurs à partir de l'API `randomuser.me` à l'aide de l'URL `https://randomuser.me/api/?results=5`
```ts
import { Http } from '@angular/http';
import { Injectable } from "@angular/core";
import "rxjs/add/operator/map";

@Injectable()
export class PeopleServiceProvider {
constructor(public http: Http) {
console.log("Hello PeopleServiceProvider Provider");
}

data: any;

load() {
if (this.data) {
// already loaded data
return Promise.resolve(this.data);
}

// don't have the data yet
return new Promise(resolve => {
// We're using Angular HTTP provider to request the data,
// then on the response, it'll map the JSON data to a parsed JS object.
// Next, we process the data and resolve the promise with the new data.
this.http
.get("https://randomuser.me/api/?results=10")
.map(res => res.json())
.subscribe(data => {
// we've got back the raw data, now generate the core schedule data
// and save the data for later reference
this.data = data.results;
resolve(this.data);
});
});
}
}
```

- déclarer ensuite l'objet `HttpModule` dans le fichier `src/app/app.module.ts` :
```ts
// dans la partie des imports :
import {HttpModule} from '@angular/http';

// et dans le tableau 'imports' :
imports: [
... ,
HttpModule
],
```

## 2. Créer la page qui va contenir la liste des personnes
- générer la page :
```sh
ionic g page PeopleList
```

- puis déclarer cette page dans le menu principale de l'application (voir ionic-tutorial1).

- modifier le code du fichier `src/pages/people-list/people-list.ts` pour avoir :
```ts
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';

import { PeopleServiceProvider } from "../../providers/people-service/people-service";

@IonicPage()
@Component({
selector: 'page-people-list',
templateUrl: 'people-list.html',
providers: [PeopleServiceProvider]
})
export class PeopleListPage {

public peoples: any;

constructor(
public navCtrl: NavController,
public navParams: NavParams,
public peopleServiceProvider: PeopleServiceProvider) {

console.log("PeopleListPage constructor.");

this.loadPeople();
}

loadPeople(){
this.peopleServiceProvider.load()
.then(data => {
this.people = data;
});
}

ionViewDidLoad() {
console.log('ionViewDidLoad PeopleListPage');
}

}
```

- modifier le code du fichier `src/pages/people-list/people-list.html` pour avoir :
```html





Peaple List






{{person.name.title}} {{person.name.first}} {{person.name.last}}


{{person.email}}



```

## 3. Créer la page qui va contenir les détails d'une personne
- générer la page :
```sh
ionic g page PeopleDetails
```

- puis déclarer cette page dans le fichier `src/app/app.module.ts` (voir ionic-tutorial1).

- dans le fichier `src/pages/people-list/people-list.html` ajouter l'appel de fonction après le clic :
```html

```

- dans le fichier `src/pages/people-list/people-list.ts` ajouter la fonction `itemTapped` qui nous rediriger vers la page `PeopleDetailsPage` :
```ts
itemTapped(event, person) {
this.navCtrl.push(PeopleDetailsPage, {
person: person
});
}
```

- le code du fichier `src/pages/people-details/people-details.ts` :
```ts
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';

@IonicPage()
@Component({
selector: 'page-people-details',
templateUrl: 'people-details.html',
})
export class PeopleDetailsPage {

selectedItem: any;

constructor(public navCtrl: NavController, public navParams: NavParams) {

this.selectedItem = navParams.get('person');

}

ionViewDidLoad() {
console.log('ionViewDidLoad PeopleDetailsPage');
}

}
```

- le code du fichier `src/pages/people-details/people-details.html` :
```html





People Details






{{selectedItem.name.title}} {{selectedItem.name.first}} {{selectedItem.name.last}}


Email: {{selectedItem.email}}


Phone: {{selectedItem.phone}}


Nationality: {{selectedItem.nat}}


City: {{selectedItem.location.city}}


State: {{selectedItem.location.state}}


Birth date: {{selectedItem.dob}}



```

Et voilà vous pouvez visualiser la liste des personnes et lorsqu'on clic sur une personne on obtient les détails.

## 4. Utiliser une même page pour la liste et les détials
Il est possible d'utiliser une seule page. On va appliquer ça à la liste du fichier `src/pages/list/list.html` :
```diff





List

+


{{item.title}}


{{item.note}}


+


You navigated here from {{selectedItem.title}} : {{selectedItem.note}}

````

Maintenant si on clic sur un item de cette liste le résultat est affiché dans la même page.