Table des matières

TD n°3

-- Exercice : Convertisseur de devises

-- Objectifs

-- Fonctionnalités

-- Ressources à utiliser

Ce fichier JSON va permettre l'initialisation des listes de monnaies affichées dans l'application

Le service $http devra être injecté dans le contrôleur :
angular.module("currencyApp").controller("currencyController",['$http', function($http) {
...

L'initialisation de la variable currencies grâce au fichier JSON se fera dans le contrôleur par une requête Ajax :

$http.get('app/data/currencymap.json').
	then(function(response) {
		self.currencies = response.data;
	},
	function(response) {
		console.log("Erreur avec le statut Http : "+response.status);
	});

Pour l'obtention des taux de change, on utilisera l'API Currency sur https://free.currencyconverterapi.com/ via Ajax et JSONP

Exemple d'interrogation :
https://free.currencyconverterapi.com/api/v3/convert?compact=y&q=USD_EUR

Résultat JSON :

{"to": "EUR", "rate": 0.83329500000000001, "from": "USD", "v": 0.83329500000000001}

La récupération des données sur free.currencyconverterapi.com doit se faire par l'intermédiaire de JSONP, et non de JSON, ce qui impose l'appel de la méthode jsonp sur l'objet $http, et le passage du paramètre JSON_CALLBACK :

Depuis Angular 1.6, il faut autoriser les URLs accessibles depuis l'application en les ajoutant à la liste blanche :

angular.module('httpExample', [])
.config(['$sceDelegateProvider', function($sceDelegateProvider) {
  // We must whitelist the JSONP endpoint that we are using to show that we trust it
  $sceDelegateProvider.resourceUrlWhitelist([
    'self',
    'https://free.currencyconverterapi.com/**'
  ]);
}]);

	$http.jsonp('https://free.currencyconverterapi.com/api/v3/convert?compact=y&q='+from.code+'_'+to.code, {jsonpCallbackParam: 'callback'})
	.then(function(response) {
			self.result=response.data[self.from.code+'_'+self.to.code].val;
	...
	});

-- Application/Contrôleurs

Application CurrencyApp (app/currencyApp.js)
Contrôleur CurrencyController (app/currencyController.js)
currencies
variable Objet stockant la liste des monnaies alimentée
par le fichier JSON currencymap.json au démarrage du contrôleur
from
variable stockant la monnaie source (à initialiser en euro)
to
variable stockant la monnaie cible (à initialiser en dollars US)
what
variable stockant le montant à convertir (à initialiser à 1)
result
variable donnant le résultat de la conversion
getResult()
Retourne le résultat en effectuant une requête JSONP vers l'adresse free.currencyconverterapi.com
Modifie en retour la variable result
swap()
Echange la monnaie source et la monnaie cible

-- Vue

-- Directives utilisées

-- Interface

-- Historisation des conversions

-- Fonctionnalités

L'historisation se fait selon les principes suivants :

On utilisera pour mémoriser les conversions déjà effectuées un objet du type :

var conversion={from : //monnaie1, 
		to : //monnaie2,	
		amount : function(){ //retourne le montant (tx* somme) }, 
		initialAmount : function(){ //Retoune le montant avec tx initial * somme},
		delta : //écart Avec première requête (tx actuel - tx initial) * somme 
		rate : //tx actuel, 
		what : //Somme, 
		date : //date & heure de la requête, 
		update: //Flag pour "en cours de mise à jour" (requête ajax), 
		initialRate : //tx initial  : invariant depuis la première requête
		};

-- Service

Intégrer la requête vers le serveur et l'historisation dans un service CurrencyService

Service CurrencyService (app/currencyService.js)
historique
Tableau de conversions
update(from,to,what,hasHisto,result)
Effectue une requête vers le serveur, met à jour l'historique et le paramètre result

-- Exercice : Calculatrice

-- Objectifs

  1. Créer un service (moteur de la calculatrice)
  2. Utiliser un service (Injection de dépendance)
  3. Créer des directives

-- Fonctionnalités

  1. Faire des calculs simples
  2. Mémoriser un résultat
  3. Eteindre/allumer calculatrice

-- Vue

-- Consignes de réalisation

Directives :

	this.ops=[
	            {value:'('},
	            {value:')'},
	            {value:'M'},
	            {value:' '},
	            {value:'RM'},
	            {value:'Off',cssClass:"btn-danger",title:"Eteindre la calculatrice"},
	            {value:'\n'},
	            {value:"⇤"},
	            {value:"CE"},
	            {value:"C"},
	            {value:" "},
	            {value:"±"},
	            {value:"√x"},
	            {value:"\n"},
	            {value:7},
	            {value:8},
	            {value:9},
	            {value:' '},
	            {value:'/'},
	            {value:'%'},
	            {value:'\n'},
	            {value:4},
	            {value:5},
	            {value:6},
	            {value:' '},
	            {value:'*'},
	            {value:'1/x'},
	            {value:'\n'},
	            {value:1},
	            {value:2},
	            {value:3},
	            {value:' '},
	            {value:'-'},
	            {value:'\n'},
	            {value:0,cssClass:"colspan btn-default"},
	            {value:'.',cssClass:"btn-default"},
	            {value:' '},
	            {value:'+'},
	            {value:'=',cssClass:"rowspan btn-success",title:"Calculer ([ENTREE]) !"}
	            ];

-- Routage

Il s'agit de créer une application permettant de naviguer entre les différents exemples implémentés, en utilisant les fonctionnalités de routage d'AngularJS.