JSON vers HTML
Présenter des données JSON en HTML
Le but de l'exercice est de présenter des données JSON dans une page HTML en assurant une bonne structuration de la page. La finalité de cet exercice est de mettre en pratique les directives du module ng qu'on a vu en cours.
Les données représentent des tutoriels qui ont été présentés par des étudiants de l'UTC. On veut présenter ces données sous forme d'une liste. Chaque item contient des informations sur l'étudiant (le nom et le prénom de l'étudiant,le type , le titre et la date de la présentation ainsi que le nombre de "j'aime".
On souhaite aussi implémenter un système de vote pour évaluer l'ensemble des présentations en se basant sur le nombre de j'aime.
Ci-dessous, vous trouverez le code AngularJS qui permet de définir le contrôleur qui va s'occuper de passer les données JSON à la vue HTML.
Vous trouverez aussi la vue HTML qu'il faudra compléter pour arriver au résultat attendu.
// app.js
var app = angular.module('nf29', []); // notre module ne dépond d'aucun autre module
app.controller('CdtCtrl',['$scope', function($scope){
$scope.tutorials = [
{
"id": 1,
"isCDT" : true,
"prenom": "Merouane",
"nom": "Harriga",
"date": "01-02-2014",
"title": "AngularJs",
"tags": ["AngularJs", "HTML5","Javascript"],
"likeNumber" : 0
},
{
"id": 2,
"isCDT" : true,
"prenom": "Alex",
"nom": "Quilliec",
"date": "01-03-2014",
"title": "Scala",
"tags": ["JAVA", "REST","API"],
"likeNumber" : 0
},
{
"id": 3,
"isCDT" : true,
"prenom": "Anthony",
"nom": "Alfredo",
"date": "01-04-2014",
"title": "real time web apps",
"tags": ["nodeJS", "Redis","websocket"],
"likeNumber" : 0
},
{
"id": 4,
"isCDT" : false,
"prenom": "Fred",
"nom": "Alamy",
"date": "01-05-2014",
"title": "Numérical document",
"tags": ["tranformation", "transclusion","scenari"],
"likeNumber" : 0
},
];
$scope.thumbUp = function(...){
}
$scope.thumbDown = function(...){
}
}]);
// app.js var app = angular.module('nf29', []); // notre module ne dépond d'aucun autre module app.controller('CdtCtrl',['$scope', function($scope){ $scope.tutorials = [ { "id": 1, "isCDT" : true, "prenom": "Merouane", "nom": "Harriga", "date": "01-02-2014", "title": "AngularJs", "tags": ["AngularJs", "HTML5","Javascript"], "likeNumber" : 0 }, { "id": 2, "isCDT" : true, "prenom": "Alex", "nom": "Quilliec", "date": "01-03-2014", "title": "Scala", "tags": ["JAVA", "REST","API"], "likeNumber" : 0 }, { "id": 3, "isCDT" : true, "prenom": "Anthony", "nom": "Alfredo", "date": "01-04-2014", "title": "real time web apps", "tags": ["nodeJS", "Redis","websocket"], "likeNumber" : 0 }, { "id": 4, "isCDT" : false, "prenom": "Fred", "nom": "Alamy", "date": "01-05-2014", "title": "Numérical document", "tags": ["tranformation", "transclusion","scenari"], "likeNumber" : 0 }, ]; $scope.thumbUp = function(...){ } $scope.thumbDown = function(...){ } }]);
Ci-dessous le fichier HTML sur lequel on va travailler
<html ng-app="nf29">
<head>
<meta charset="UTF-8"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body class="container">
<div ng-controller="CdtCtrl">
<!-- Q1 -->
<header>
<div class="container">
<div class="row">
<br>
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-admin">
<span class="sr-only"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand">Angular Js <span class="glyphicon glyphicon-stats"></span></a>
<p class="navbar-text" clickable>Cours NF29 ...</p>
</div>
<div class="collapse navbar-collapse" id="navbar-admin"></div>
</div>
</nav>
</div>
</div>
</header>
<div class="container">
<ul class="list-group" id="contact-list">
<!-- Q2 -->
<li ... class="list-group-item">
<div class="col-xs-12 col-sm-3">
<img src="https://uxcam.com/images/join-uxcam.png" alt="Glenda Patterson" class="img-responsive img-circle fixedWidth" />
</div>
<div class="col-xs-12 col-sm-9">
<span class="name"> nom prenom </span> <span> (Recommandé)</span><br/>
<span> date</span>
<hr />
<ul class="tags">
0.1 tag 1
0.2 tag 2
...
</ul>
</div>
<!-- Q3 Vote -->
<div class="row">
<div class="col-sm-3 col-md-3 col-lg-3">
<div class="input-group">
<span><button type="button" id="increaseButton" class="btn btn-success">+</button> </span>
<span class=""><button type="button" id="decreaseButton" class="btn btn-danger">-</button> </span>
<span class=""><button type="button" id="decreaseButton" class="btn btn-info"> 50 </button></span>
</div>
</div>
</div>
<div class="clearfix"></div>
</li>
</ul>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js"></script>
<script src="app.js"></script>
</body>
</html>
<!doctype html> <html ng-app="nf29"> <head> <meta charset="UTF-8"/> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" /> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body class="container"> <div ng-controller="CdtCtrl"> <!-- Q1 --> <header> <div class="container"> <div class="row"> <br> <nav class="navbar navbar-default" role="navigation"> <div class="container-fluid"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-admin"> <span class="sr-only"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand">Angular Js <span class="glyphicon glyphicon-stats"></span></a> <p class="navbar-text" clickable>Cours NF29 ...</p> </div> <div class="collapse navbar-collapse" id="navbar-admin"></div> </div> </nav> </div> </div> </header> <div class="container"> <ul class="list-group" id="contact-list"> <!-- Q2 --> <li ... class="list-group-item"> <div class="col-xs-12 col-sm-3"> <img src="https://uxcam.com/images/join-uxcam.png" alt="Glenda Patterson" class="img-responsive img-circle fixedWidth" /> </div> <div class="col-xs-12 col-sm-9"> <span class="name"> nom prenom </span> <span> (Recommandé)</span><br/> <span> date</span> <hr /> <ul class="tags"> 0.1 tag 1 0.2 tag 2 ... </ul> </div> <!-- Q3 Vote --> <div class="row"> <div class="col-sm-3 col-md-3 col-lg-3"> <div class="input-group"> <span><button type="button" id="increaseButton" class="btn btn-success">+</button> </span> <span class=""><button type="button" id="decreaseButton" class="btn btn-danger">-</button> </span> <span class=""><button type="button" id="decreaseButton" class="btn btn-info"> 50 </button></span> </div> </div> </div> <div class="clearfix"></div> </li> </ul> </div> </div> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.min.js"></script> <script src="app.js"></script> </body> </html>
Vous pouvez télécharger l'atelier de l'exercice.
Question
Externaliser le Header de la page En utilisant la directive ng-include
Question
Question
On veut réaliser un système simple de vote en utilisant la directive ng-click.
Si l'utilisateur clique sur le bouton vert(+), le nombre de "likeNumber" s'augmente par 1
Si l'utilisateur clique sur le bouton rouge(-), le nombre de "likeNumber" se diminue de 1
Sachez que vous pouvez passer des paramètres depuis la vue HTML à une fonction au sein du contrôleur.
Question
Vous pouvez télécharger la solution complète.