Prérequis :
|
Ce fichier JSON va permettre l'initialisation des listes de monnaies affichées dans l'application
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}
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 | 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 |
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 };
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 |
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]) !"} ];