Corrections slides
This commit is contained in:
parent
ccfe7374cc
commit
e0ad7f004d
|
@ -13,7 +13,7 @@
|
||||||
<!-- Déclaration du point de montage de notre application" -->
|
<!-- Déclaration du point de montage de notre application" -->
|
||||||
<body ng-app="myApp">
|
<body ng-app="myApp">
|
||||||
<div ng-controller="MyAppCtrl">
|
<div ng-controller="MyAppCtrl">
|
||||||
<span>{{ $scope.foo }}</span> <!-- Affiche "Hello World !" -->
|
<span>{{ foo }}</span> <!-- Affiche "Hello World !" -->
|
||||||
</div>
|
</div>
|
||||||
<!-- Import du framework Angular -->
|
<!-- Import du framework Angular -->
|
||||||
<script src="angular.js"></script>
|
<script src="angular.js"></script>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# .cadoles-slide-title[Les directives de base (1/6)]
|
# .cadoles-slide-title[Les directives de base (1/5)]
|
||||||
|
|
||||||
**Itération avec ng-repeat: sur un tableau**
|
**Itération avec ng-repeat: sur un tableau**
|
||||||
```html
|
```html
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# .cadoles-slide-title[Les directives de base (2/6)]
|
# .cadoles-slide-title[Les directives de base (2/5)]
|
||||||
|
|
||||||
**Itération avec ng-repeat: sur un objet**
|
**Itération avec ng-repeat: sur un objet**
|
||||||
```html
|
```html
|
||||||
|
|
|
@ -1,29 +1,22 @@
|
||||||
# .cadoles-slide-title[Les directives de base (3/6)]
|
# .cadoles-slide-title[Les directives de base (3/5)]
|
||||||
|
|
||||||
**Itération avec ng-repeat: sur un objet**
|
**Conditions dans les templates: `ng-show`, `ng-hide`, `ng-switch`**
|
||||||
```html
|
```html
|
||||||
<html>
|
<html>
|
||||||
<body ng-app="myApp">
|
<body ng-app="myApp">
|
||||||
<div ng-controller="MainCtrl">
|
<div ng-controller="MainCtrl" ng-init="myTest = true; myVal = 'foo'">
|
||||||
<ul>
|
|
||||||
<li ng-repeat="(key, val) in myObj">
|
<span ng-hide="myTest === true">Caché !</span>
|
||||||
<span>Clé: {{ key }}</span><span>Valeur: {{ value }}</span>
|
<span ng-show="myTest === true">Affiché !</span>
|
||||||
</li>
|
|
||||||
</ul>
|
<div ng-switch="myVar">
|
||||||
|
<span ng-switch-when="foo">Affiché !</span>
|
||||||
|
<span ng-switch-when="bar">Caché !</span>
|
||||||
|
<span ng-switch-default>Caché !</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script src="angular.js"></script>
|
<script src="angular.js"></script>
|
||||||
<script>
|
|
||||||
angular.module('myApp', [])
|
|
||||||
.controller('MainCtrl', ['$scope', function($scope) {
|
|
||||||
|
|
||||||
$scope.myObj = [
|
|
||||||
'prop1': 'Foo',
|
|
||||||
'prop2': 'Bar'
|
|
||||||
'prop3': 'Baz'
|
|
||||||
];
|
|
||||||
|
|
||||||
}]);
|
|
||||||
</script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
```
|
```
|
||||||
|
|
|
@ -1,19 +1,20 @@
|
||||||
# .cadoles-slide-title[Les directives de base (4/6)]
|
# .cadoles-slide-title[Les directives de base (4/5)]
|
||||||
|
|
||||||
**Conditions dans les templates: `ng-show`, `ng-hide`, `ng-switch`**
|
**Modification dynamique du style: `ng-class`**
|
||||||
```html
|
```html
|
||||||
<html>
|
<html>
|
||||||
<body ng-app="myApp">
|
<body ng-app="myApp">
|
||||||
<div ng-controller="MainCtrl" ng-init="myTest = true; myVal = 'foo'">
|
|
||||||
|
|
||||||
<span ng-hide="myTest === true">Caché !</span>
|
<style>
|
||||||
<span ng-show="myTest === true">Affiché !</span>
|
.red { color: red; }
|
||||||
|
.blue { color: blue; }
|
||||||
|
.xxl { font-size: 50px; font-weight: bold; }
|
||||||
|
</style>
|
||||||
|
<div ng-controller="MainCtrl" ng-init="iLoveBlue=true; iLoveRed=false; myClasses=['red', 'xxl']">
|
||||||
|
|
||||||
<div ng-switch="myTest === true">
|
<span ng-class="myClasses">Rouge et large</span>
|
||||||
<span ng-switch-when="foo">Affiché !</span>
|
|
||||||
<span ng-switch-when="bar">Caché !</span>
|
<span ng-class="{'red': iLoveRed, 'blue': iLoveBlue}">Bleu</span>
|
||||||
<span ng-switch-default="baz">Caché !</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script src="angular.js"></script>
|
<script src="angular.js"></script>
|
||||||
|
|
|
@ -1,23 +1,26 @@
|
||||||
# .cadoles-slide-title[Les directives de base (5/6)]
|
# .cadoles-slide-title[Les directives de base (5/5)]
|
||||||
|
|
||||||
|
**Inclusion de template avec la directive `ng-include`**
|
||||||
|
|
||||||
**Modification dynamique du style: `ng-class`**
|
|
||||||
```html
|
```html
|
||||||
|
|
||||||
|
<!-- Fichier index.html -->
|
||||||
|
|
||||||
<html>
|
<html>
|
||||||
<body ng-app="myApp">
|
<body ng-app>
|
||||||
|
<ng-include src="'template1.html'"></ng-include>
|
||||||
<style>
|
|
||||||
.red { color: red; }
|
|
||||||
.blue { color: blue; }
|
|
||||||
.xxl { font-size: 50px; font-weight: bold; }
|
|
||||||
</style>
|
|
||||||
<div ng-controller="MainCtrl" ng-init="iLoveBlue=true; iLoveRed=false; myClasses=['red', 'xxl']">
|
|
||||||
|
|
||||||
<span ng-class="myClasses">Rouge et large</span>
|
|
||||||
|
|
||||||
<span ng-class="{'red': iLoveRed, 'blue': iLoveBlue}">Bleu</span>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<script src="angular.js"></script>
|
<script src="angular.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
<!-- Fichier template1.html -->
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div ng-controller="MyCtrl">
|
||||||
|
<!-- ... -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- Les templates peuvent être chargés dynamiquement, à la volée.
|
||||||
|
- Il est possible de les précompiler et de les inclures sous leur forme Javascript lors de la mise en production
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
# .cadoles-slide-title[Les directives de base (6/6)]
|
|
||||||
|
|
||||||
**Inclusion de template avec la directive `ng-include`**
|
|
||||||
|
|
||||||
```html
|
|
||||||
|
|
||||||
<!-- Fichier index.html -->
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<body ng-app>
|
|
||||||
<ng-include="'template1.html'"></ng-include>
|
|
||||||
<script src="angular.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
||||||
<!-- Fichier template1.html -->
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<div ng-controller="MyCtrl">
|
|
||||||
<!-- ... -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
```
|
|
||||||
|
|
||||||
- Les templates peuvent être chargés dynamiquement, à la volée.
|
|
||||||
- Il est possible de les précompiler et de les inclures sous leur forme Javascript lors de la mise en production
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* Énoncé:
|
||||||
|
*
|
||||||
|
* 1. Modifier le template de index.html afin de modifier l'affichage des commits
|
||||||
|
* dans la table HTML en utilisant les filtres de base d'Angular.
|
||||||
|
*
|
||||||
|
* Contraintes d'affichage:
|
||||||
|
* - La date du commit devra être affiché au format "dd-mm-yyyy"
|
||||||
|
* - L'afichage du SHA du commit devra être limité à 10 caractères
|
||||||
|
*
|
||||||
|
* ! Pas besoin de modifier le code de app.js !
|
||||||
|
*
|
||||||
|
* 2. Mettre en place les directives et le filtre nécessaire afin d'implémenter
|
||||||
|
* un champ de recherche permettant de filtrer la liste des commits.
|
||||||
|
*
|
||||||
|
* Indice:
|
||||||
|
* - Filtre "filter": https://code.angularjs.org/1.3.15/docs/api/ng/filter/filter
|
||||||
|
*
|
||||||
|
* ! Pas besoin de modifier le code de app.js !
|
||||||
|
*
|
||||||
|
* 3. Implémenter un filtre qui "met en lumière" (change la couleur du fond du texte) les éléments
|
||||||
|
* correspondants à la recherche dans le message de commit.
|
||||||
|
*
|
||||||
|
* Exemple d'usage attendu: {{ 'my text' | highlight:'my' }}
|
||||||
|
*
|
||||||
|
* Indices:
|
||||||
|
* - Le filtre devra rechercher le texte voulu et le remplacer par un fragment de HTML
|
||||||
|
* - Nécessite l'usage du service $sce dans le filtre et de sa méthode $sce.trustAsHtml() https://docs.angularjs.org/api/ngSanitize
|
||||||
|
* - Nécessite également l'utilisation de la directive ng-bind-html plutot que l'utilisation des {{ ... }} https://docs.angularjs.org/api/ng/directive/ngBindHtml
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Exo = angular.module('Exo', []);
|
||||||
|
|
||||||
|
Exo.controller('MainCtrl', ['$scope', '$http', function($scope, $http) {
|
||||||
|
|
||||||
|
$scope.commits = [];
|
||||||
|
|
||||||
|
$http.get('https://api.github.com/repos/torvalds/linux/commits')
|
||||||
|
.then(function(res) {
|
||||||
|
$scope.commits = res.data;
|
||||||
|
})
|
||||||
|
;
|
||||||
|
|
||||||
|
}]);
|
||||||
|
|
||||||
|
Exo.filter('highlight', ['$sce', function($sce) {
|
||||||
|
|
||||||
|
return function(input, needle) {
|
||||||
|
|
||||||
|
if( !angular.isString(input) ) return input;
|
||||||
|
|
||||||
|
var html = '<span style="background: yellow">'+needle+'</span>';
|
||||||
|
return $sce.trustAsHtml(input.replace(needle, html));
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}]);
|
|
@ -0,0 +1,46 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf8">
|
||||||
|
<title>Exercice: Utilisation des filtres</title>
|
||||||
|
</head>
|
||||||
|
<!-- Déclaration de l'application -->
|
||||||
|
<body ng-app="Exo">
|
||||||
|
|
||||||
|
<div ng-controller="MainCtrl">
|
||||||
|
|
||||||
|
<h1>Commits du dépôt torvalds/linux sur Github</h1>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="4">
|
||||||
|
<input type="text" style="width: 100%" placeholder="Filtrer la liste" ng-model="search" />
|
||||||
|
</th>
|
||||||
|
<tr>
|
||||||
|
<tr>
|
||||||
|
<th>Date</th>
|
||||||
|
<th>SHA</th>
|
||||||
|
<th>Author</th>
|
||||||
|
<th>Message</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<tr ng-repeat="c in commits | filter:search">
|
||||||
|
<td>{{c.commit.author.date | date:'dd-mm-yyyy' }}</td>
|
||||||
|
<td>{{c.sha | limitTo:10 }}</td>
|
||||||
|
<td>{{c.commit.author.name }}</td>
|
||||||
|
<td ng-bind-html="c.commit.message | highlight:search"></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Import de du framework Angular -->
|
||||||
|
<script src="../../node_modules/angular/angular.js"></script>
|
||||||
|
<script src="app.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,46 @@
|
||||||
|
/*
|
||||||
|
* Énoncé:
|
||||||
|
*
|
||||||
|
* 1. Modifier le template de index.html afin de modifier l'affichage des commits
|
||||||
|
* dans la table HTML en utilisant les filtres de base d'Angular.
|
||||||
|
*
|
||||||
|
* Contraintes d'affichage:
|
||||||
|
* - La date du commit devra être affiché au format "dd-mm-yyyy"
|
||||||
|
* - L'afichage du SHA du commit devra être limité à 10 caractères
|
||||||
|
*
|
||||||
|
* ! Pas besoin de modifier le code de app.js !
|
||||||
|
*
|
||||||
|
* 2. Mettre en place les directives et le filtre nécessaire afin d'implémenter
|
||||||
|
* un champ de recherche permettant de filtrer la liste des commits.
|
||||||
|
*
|
||||||
|
* Indice:
|
||||||
|
* - Filtre "filter": https://code.angularjs.org/1.3.15/docs/api/ng/filter/filter
|
||||||
|
*
|
||||||
|
* ! Pas besoin de modifier le code de app.js !
|
||||||
|
*
|
||||||
|
* 3. Implémenter un filtre qui "met en lumière" (change la couleur du fond du texte) les éléments
|
||||||
|
* correspondants à la recherche dans le message de commit.
|
||||||
|
*
|
||||||
|
* Exemple d'usage attendu: {{ 'my text' | highlight:'my' }}
|
||||||
|
*
|
||||||
|
* Indices:
|
||||||
|
* - Le filtre devra rechercher le texte voulu et le remplacer par un fragment de HTML
|
||||||
|
* - Nécessite l'usage du service $sce dans le filtre et de sa méthode $sce.trustAsHtml(), voir https://docs.angularjs.org/api/ngSanitize
|
||||||
|
* - Nécessite également l'utilisation de la directive "ng-bind-html" plutot que l'utilisation des {{ ... }} pour l'affichage du message, voir https://docs.angularjs.org/api/ng/directive/ngBindHtml
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
var Exo = angular.module('Exo', []);
|
||||||
|
|
||||||
|
Exo.controller('MainCtrl', ['$scope', '$http', function($scope, $http) {
|
||||||
|
|
||||||
|
$scope.commits = [];
|
||||||
|
|
||||||
|
$http.get('https://api.github.com/repos/torvalds/linux/commits')
|
||||||
|
.then(function(res) {
|
||||||
|
$scope.commits = res.data;
|
||||||
|
})
|
||||||
|
;
|
||||||
|
|
||||||
|
}]);
|
|
@ -0,0 +1,46 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf8">
|
||||||
|
<title>Exercice: Utilisation des filtres</title>
|
||||||
|
</head>
|
||||||
|
<!-- Déclaration de l'application -->
|
||||||
|
<body ng-app="Exo">
|
||||||
|
|
||||||
|
<div ng-controller="MainCtrl">
|
||||||
|
|
||||||
|
<h1>Commits du dépôt torvalds/linux sur Github</h1>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="4">
|
||||||
|
<input type="text" style="width: 100%" placeholder="Filtrer la liste" />
|
||||||
|
</th>
|
||||||
|
<tr>
|
||||||
|
<tr>
|
||||||
|
<th>Date</th>
|
||||||
|
<th>SHA</th>
|
||||||
|
<th>Author</th>
|
||||||
|
<th>Message</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<tr ng-repeat="c in commits">
|
||||||
|
<td>{{c.commit.author.date }}</td>
|
||||||
|
<td>{{c.sha }}</td>
|
||||||
|
<td>{{c.commit.author.name }}</td>
|
||||||
|
<td>{{c.commit.message}}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Import de du framework Angular -->
|
||||||
|
<script src="../node_modules/angular/angular.js"></script>
|
||||||
|
<script src="app.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,22 @@
|
||||||
|
# .cadoles-slide-title[Les filtres (1/)]
|
||||||
|
|
||||||
|
- Les filtres permettent de formatter le résultat d'une expression afin de l'afficher à l'utilisateur.
|
||||||
|
- Ils peuvent être utilisés dans les templates, dans les contrôleurs ou dans les services.
|
||||||
|
- Angular fournit une liste de [filtres par défaut](https://code.angularjs.org/1.3.15/docs/api/ng/filter), mais il est possible également de créer ses propres filtres.
|
||||||
|
|
||||||
|
**Usage d'un filtre dans les expressions**
|
||||||
|
```html
|
||||||
|
<div ng-app ng-init="myStr = 'Hello World !'; myArr = ['item 1', 'item 2', 'item 3']">
|
||||||
|
|
||||||
|
<!-- Syntaxe: expression | filtre[:arg1:arg2:...] -->
|
||||||
|
|
||||||
|
<span>{{ myStr | uppercase }}</span> <!-- "HELLO WORD !" -->
|
||||||
|
|
||||||
|
<!-- On peut chaîner les filtres -->
|
||||||
|
<span>{{ myStr | uppercase | lowercase }}</span> <!-- "hello world !" -->
|
||||||
|
|
||||||
|
<!-- On peut l'utiliser sur différents types de valeurs, par exemple un tableau -->
|
||||||
|
<span>{{ myArr | limitTo:2 }}</span> <!-- ['item 1', 'item 2'] -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
```
|
|
@ -0,0 +1,16 @@
|
||||||
|
# .cadoles-slide-title[Les filtres (2/)]
|
||||||
|
|
||||||
|
**Exemple d'usage dans un contrôleur**
|
||||||
|
```js
|
||||||
|
angular.module('myApp', [])
|
||||||
|
.controller('MyCtrl', ['$scope', '$filter', function($scope, $filter) {
|
||||||
|
|
||||||
|
var myArr = ['item 1', 'item 2', 'item 3'];
|
||||||
|
|
||||||
|
// Usage: result = $filter(filterId, input, arg1, arg2, ...);
|
||||||
|
|
||||||
|
console.log( $filter('limitTo', myArr, 2) ); // -> ['item 1', 'item 2']
|
||||||
|
|
||||||
|
}])
|
||||||
|
;
|
||||||
|
```
|
|
@ -0,0 +1,32 @@
|
||||||
|
# .cadoles-slide-title[Les filtres (3/)]
|
||||||
|
|
||||||
|
**Création d'un filtre personnalisé**
|
||||||
|
```js
|
||||||
|
// Création du filtre
|
||||||
|
angular.module('myApp', []).filter('join', function() {
|
||||||
|
|
||||||
|
// Fonction de formatage
|
||||||
|
return function(input, separator) {
|
||||||
|
|
||||||
|
// Utilisation d'une valeur par défaut si le séparateur n'est pas défini
|
||||||
|
separator = separator || ',';
|
||||||
|
|
||||||
|
// Si l'entrée n'est pas un tableau, on retourne celle ci sans modification
|
||||||
|
if( !angular.isArray(input) ) return input;
|
||||||
|
|
||||||
|
// On retourne le tableau sous la forme d'une chaine de caractères,
|
||||||
|
// ses éléments joints par le séparateur
|
||||||
|
return input.join(separator);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
|
```
|
||||||
|
**Usage**
|
||||||
|
```html
|
||||||
|
<div ng-app="myApp" ng-init="myArr = ['item 1', 'item 2', 'item 3']">
|
||||||
|
|
||||||
|
{{ myArr | join:'/' }}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
```
|
|
@ -1,7 +0,0 @@
|
||||||
# .cadoles-slide-title[Fin]
|
|
||||||
|
|
||||||
.cadoles-center[
|
|
||||||
|
|
||||||
# Fin de la première partie
|
|
||||||
|
|
||||||
]
|
|
|
@ -28,8 +28,11 @@
|
||||||
'directives-3',
|
'directives-3',
|
||||||
'directives-4',
|
'directives-4',
|
||||||
'directives-5',
|
'directives-5',
|
||||||
'directives-6',
|
'filtres-1',
|
||||||
'fin'
|
'filtres-2',
|
||||||
|
'filtres-3',
|
||||||
|
'questions',
|
||||||
|
'licence'
|
||||||
];
|
];
|
||||||
</script>
|
</script>
|
||||||
<script src="../bower_components/remark/out/remark.js"></script>
|
<script src="../bower_components/remark/out/remark.js"></script>
|
||||||
|
|
|
@ -8,10 +8,10 @@
|
||||||
- Contrôleurs et scopes
|
- Contrôleurs et scopes
|
||||||
- Services et injection de dépendances
|
- Services et injection de dépendances
|
||||||
- Les directives de base
|
- Les directives de base
|
||||||
- Routage avec le module `ngRoute`
|
|
||||||
- Les filtres
|
- Les filtres
|
||||||
- Création de directives
|
- Création de directives
|
||||||
- Animations
|
- Animations
|
||||||
|
- Routage avec le module `ngRoute`
|
||||||
- Organisation d'un projet
|
- Organisation d'un projet
|
||||||
- Tests unitaires
|
- Tests unitaires
|
||||||
- Tests fonctionnels
|
- Tests fonctionnels
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
<script src="angular.js"></script>
|
<script src="angular.js"></script>
|
||||||
<script>
|
<script>
|
||||||
angular.module('myApp', []);
|
angular.module('myApp', [])
|
||||||
.controller('MyAppCtrl', ['$scope', function($scope) {
|
.controller('MyAppCtrl', ['$scope', function($scope) {
|
||||||
|
|
||||||
$scope.myValue = 'Foo !'
|
$scope.myValue = 'Foo !'
|
||||||
|
|
Loading…
Reference in New Issue