TD n°3
Prérequis :
|
|
-- Exercice : Convertisseur de devises
-- Objectifs
- Utiliser des services Angular existants
- Mettre en oeuvre l'injection de dépendance
-- Fonctionnalités
- Saisir un montant dans une devise source
- Sélectionner la devise cible
- Calculer la conversion à partir des taux courants
- Effectuer l'opération inverse (échange des devises)
-- Ressources à utiliser
- Télécharger le fichier currencymap.json sur le site Locale Planet
- Enregistrer le dans le dossier app/data ( à créer) de votre projet
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/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
- ng-app
- ng-controller
- ng-click
- ng-model
-- Interface
-- Historisation des conversions
-- Fonctionnalités
L'historisation se fait selon les principes suivants :
- Toute nouvelle conversion ajoute une ligne dans l'historique des conversions (identifiée par le couple monnaie From + To)
- Toute requête vers une conversion déjà présente dans l'historique met à jour la ligne de l'historique concernée (rate & delta)
- L'utilisateur pourra afficher/masquer la liste des conversions déjà effectuées (les 2 monnaies, le sens , le tx et la date/heure de conversion, l'écart de taux avec une conversion précédente)
- Vider cette liste
- Supprimer un élément de la liste
- Mettre à jour automatiquement les conversions en effectuant à nouveau une requête à intervalle donné
- Calculer l'écart de tx ou de montant et faire apparaître en rouge les baisses, en vert les hausses
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
- Créer un service (moteur de la calculatrice)
- Utiliser un service (Injection de dépendance)
- Créer des directives
-- Fonctionnalités
- Faire des calculs simples
- Mémoriser un résultat
- Eteindre/allumer calculatrice
-- Vue
-- Consignes de réalisation
Directives :
- Créer une directive permettant de créer un bouton de calculatrice (placer ensuite les valeurs possibles prises par les boutons dans un tableau, initialisé dans le code :
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]) !"}
];
- créer la partie calcul dans 1 service, et injecter ce service dans le contrôleur.
-- Routage



