Base formation angular+amélioration layout formations JS

This commit is contained in:
2015-04-06 17:50:08 +02:00
parent e4811d8040
commit 4df20d8adf
29 changed files with 800 additions and 25 deletions

View File

@ -0,0 +1,11 @@
# .cadoles-slide-title[Angular, présentation générale]
.cadoles-list[
- Framework applicatif côté client en Javascript
- Initialement présenté par Google en 2009
- Licence MIT
- Dernière version stable 1.3.15 (version 2 en alpha)
- Compatible avec l'ensemble des navigateurs, IE compris (jusqu'à IE8)
]

View File

@ -0,0 +1,36 @@
# .cadoles-slide-title[Premier coup d'oeil]
**Une application basique**
```html
<html>
<head>
<meta charset="utf8">
<title>Calculateur de diamètre et périmètre d'un cercle</title>
</head>
<!-- Déclaration du point d'entrée et initialisation de l'application -->
<body ng-app ng-init="radius=1.0; pi=3.14">
<h1>Calculateur de diamètre et périmètre d'un cercle</h1>
<!-- Liaison de données via la directive ng-model -->
<label>Approximation de π:</label>
<input ng-model="pi" type="number" />
<br />
<!-- Champ de récupération du rayon -->
<label>Rayon de votre cercle:</label>
<input ng-model="radius" type="number" />
<hr />
<!-- Affichage des valeurs calculées -->
<b>Diamètre: </b><span>{{ 2 * radius }}</span><br />
<b>Périmètre: </b><span>{{ 2 * radius * pi }}</span><br />
<!-- Import de du framework Angular -->
<script src="../node_modules/angular/angular.js"></script>
</body>
</html>
```

View File

@ -0,0 +1,32 @@
# .cadoles-slide-title[Les contrôleurs]
.cadoles-small[
- Les contrôleurs permettent de gérer la logique métier dans votre application Angular.
- La définition du périmètre d'action d'un contrôleur est lié à un élément du DOM et se fait via l'utilisation de la directive `ng-controller`
]
**Exemple**
```html
<html>
<!-- Déclaration du point de montage de notre application" -->
<body ng-app="myApp">
<div ng-controller="MyAppCtrl">
<span>{{ $scope.foo }}</span> <!-- Affiche "Hello World !" -->
</div>
<!-- Import du framework Angular -->
<script src="angular.js"></script>
<!-- Déclaration de notre module/application Angular -->
<script>
var myApp = angular.module('myApp', []);
myApp.controller('MyAppCtrl', ['$scope', function($scope) {
$scope.foo = 'Hello World !';
}]);
</script>
</body>
</html>
```

View File

@ -0,0 +1,8 @@
class: middle, center
# .cadoles-blue[Formation AngularJS 1]
## .cadoles-blue[EOLE]
### William Petit
<img style="height: 30px" src=../../beamer-skel/img/logo-cadoles-01.png />
### 09/10 Avril 2015

View File

@ -0,0 +1 @@
node_modules

View File

@ -0,0 +1,29 @@
<html>
<head>
<meta charset="utf8">
<title>Calculateur de diamètre et périmètre d'un cercle</title>
</head>
<!-- Déclaration de l'application -->
<body ng-app ng-init="radius=1.0; pi=3.14">
<h1>Calculateur de diamètre et périmètre d'un cercle</h1>
<label>Approximation de π:</label>
<input ng-model="pi" type="number" step="0.01" />
<br />
<!-- Champ de récupération du rayon -->
<label>Rayon de votre cercle:</label>
<input ng-model="radius" type="number" step="0.1" />
<hr />
<!-- Affichage des valeurs calculées -->
<b>Diamètre: </b><span>{{ 2 * radius }}</span><br />
<b>Périmètre: </b><span>{{ 2 * radius * pi }}</span><br />
<!-- Import de du framework Angular -->
<script src="../node_modules/angular/angular.js"></script>
</body>
</html>

View File

@ -0,0 +1,14 @@
{
"name": "angular-exercices",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "GPL",
"dependencies": {
"angular": "^1.3.15"
}
}

View File

@ -0,0 +1,25 @@
/*
* Énoncé:
*
* Implémenter le contrôleur MainCtrl et sa fonction sayHello()
* affichant le message "Bonjour <nom> <prénom>. Votre âge est <age>.",
* où les éléments <???> sont remplacés par les données présentes dans le
* formulaire, lorsque l'utilisateur clique sur le bouton "Dire bonjour".
*
* Attention: des directives Angular sont également nécessaires dans le code HTML.
*
*/
var Exo = angular.module('Exo', []);
Exo.controller('MainCtrl', ['$scope', function($scope) {
$scope.nom = null;
$scope.prenom = null;
$scope.age = null;
$scope.direBonjour = function() {
// alert('...');
};
}]);

View File

@ -0,0 +1,31 @@
<html>
<head>
<meta charset="utf8">
<title>Exercice manipulation $scope et contrôleur</title>
</head>
<!-- Déclaration de l'application -->
<body ng-app="Exo">
<div ng-controller="MainCtrl">
<label>Nom</label>
<input type="text" />
<br />
<label>Prénom</label>
<input type="text" />
<br />
<label>Age</label>
<input type="number" />
<br />
<button>Dire bonjour</button>
</div>
<!-- Import de du framework Angular -->
<script src="../node_modules/angular/angular.js"></script>
<script src="app.js"></script>
</body>
</html>

View File

@ -0,0 +1,25 @@
/*
* Énoncé:
*
* Implémenter le contrôleur MainCtrl et sa fonction sayHello()
* affichant le message "Bonjour <nom> <prénom>. Votre âge est <age>.",
* où les éléments <???> sont remplacés par les données présentes dans le
* formulaire, lorsque l'utilisateur clique sur le bouton "Dire bonjour".
*
* Attention: des directives Angular sont également nécessaires dans le code HTML.
*
*/
var Exo = angular.module('Exo', []);
Exo.controller('MainCtrl', ['$scope', function($scope) {
$scope.nom = null;
$scope.prenom = null;
$scope.age = null;
$scope.direBonjour = function() {
// alert('...');
};
}]);

View File

@ -0,0 +1,31 @@
<html>
<head>
<meta charset="utf8">
<title>Exercice manipulation $scope et contrôleur</title>
</head>
<!-- Déclaration de l'application -->
<body ng-app="Exo">
<div ng-controller="MainCtrl">
<label>Nom</label>
<input type="text" />
<br />
<label>Prénom</label>
<input type="text" />
<br />
<label>Age</label>
<input type="number" />
<br />
<button>Dire bonjour</button>
</div>
<!-- Import de du framework Angular -->
<script src="../node_modules/angular/angular.js"></script>
<script src="app.js"></script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html>
<head>
<title>Cadoles - Formation Angular</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link href="../cadoles-theme.css" rel="stylesheet">
</head>
<body>
<script type="text/javascript">
SLIDES = [
'cover',
'plan',
'spa',
'angular',
'app-basique',
'liaison-donnees-1',
'modules',
'controleurs',
'scope-1',
'scope-2',
'scope-3',
'scope-4',
'licence'
];
</script>
<script src="../bower_components/remark/out/remark.js"></script>
<script src="../slideshow-bootstrap.js"></script>
</body>
</html>

View File

@ -0,0 +1,23 @@
# .cadoles-slide-title[La liaison de données]
.cadoles-left-column[
**Liaison à sens unique**
<img src="./img/One_Way_Data_Binding.png" style="max-width:85%" />
]
.cadoles-right-column[
**Liaison à double sens**
<img src="./img/Two_Way_Data_Binding.png" style="max-width:85%" />
]
.cadoles-xs.cadoles-center.cadoles-clearfix[
Source: [Documentation Angular](https://docs.angularjs.org/guide/databinding)
]

View File

@ -0,0 +1,12 @@
# .cadoles-slide-title[Licence]
Cette œuvre est mise à disposition sous licence [cc-by-nc-sa-2.0](http://creativecommons.org/licenses/by-nc-sa/2.0/fr/)
- Attribution
- Pas dUtilisation Commerciale
- Partage dans les Mêmes Conditions 2.0
- France
Pour voir une copie de cette licence, visitez http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
ou écrivez à Creative Commons, 444 Castro Street, Suite 900,
Mountain View, California, 94041, USA.

View File

@ -0,0 +1,25 @@
# .cadoles-slide-title[Modules]
- Un module est une unité logique, fonctionnelle de votre application.
- Une application Angular est un aggrégat d'un ou plusieurs modules, i.e. plusieurs modules distincts peuvent partager la même page via des points de montage différents.
- Un module peut avoir zéro, une ou plusieurs dépendances vers d'autres modules.
**Exemple**
```html
<html>
<!-- Déclaration du point de montage de notre application" -->
<body ng-app="myApp">
<!-- Import de du framework Angular -->
<script src="angular.js"></script>
<!-- Déclaration de notre module/application Angular -->
<script>
var myApp = angular.module('myApp', []);
</script>
</body>
</html>
```

View File

@ -0,0 +1,40 @@
# .cadoles-slide-title[Plan]
- SPA & changement de paradigme
- Angular: présentation générale
- Premier coup d'oeil
- Liaison de données
- Modules
- Contrôleurs et scopes
- Services et injection de dépendances
- Templates et expressions
- Les filtres
- Directives
- Animations
- Tests unitaires
- Tests fonctionnels
???
## Plan complet
- SPA & changement de paradigme
- Angular: présentation générale
- Premier coup d'oeil
- Liaison de données
- Modules
- Contrôleurs et scopes
- Les contrôleurs
- L'objet `$scope`
- Services et injection de dépendances
- Utilisation de services
- Création de services personalisés
- Templates et expressions
- Itération
- Inclusion de templates
- Manipulation des classes
- Les filtres
- Directives
- Animations
- Tests unitaires
- Tests fonctionnels

View File

@ -0,0 +1,5 @@
# .cadoles-slide-title[{{ end() }}]
.cadoles-center[
## Des questions ?
]

View File

@ -0,0 +1,35 @@
# .cadoles-slide-title[L'objet $scope (1/4)]
.cadoles-small[
- L'object `$scope` est le lien entre la logique métier de votre contrôleur et le DOM.
- C'est le contexte utilisé lors des opérations de liaison de données.
- C'est également le principal médium de gestion des interactions de l'utilisateur avec votre application.
]
**Exemple**
```html
<html>
<body ng-app="myApp">
<div ng-controller="MyAppCtrl">
<!-- La directive "ng-click" associe la méthode exposée sur le $scope à l'évènement "onclick" -->
<button ng-click="buttonClickHandler()"></button>
</div>
<script src="angular.js"></script>
<script>
var myApp = angular.module('myApp', []);
myApp.controller('MyAppCtrl', ['$scope', function($scope) {
$scope.buttonClickHandler = function() {
alert('Click !');
};
}]);
</script>
</body>
</html>
```

View File

@ -0,0 +1,31 @@
# .cadoles-slide-title[L'objet $scope (2/4)]
**Contrôleurs et héritage prototypal des `$scope`**
```html
<html>
<body ng-app="myApp">
<div ng-controller="ParentCtrl">
{{parentProp}} <!-- "Foo" -->
<div ng-controller="ChildCtrl">
* {{parentProp}} <!-- "Foo" -->
{{childProp}} <!-- "Bar" -->
</div>
</div>
<script src="angular.js"></script>
<script>
var myApp = angular.module('myApp', []);
myApp.controller('ParentCtrl', ['$scope', function($scope) {
* $scope.parentProp = "Foo";
}]);
myApp.controller('ChildCtrl', ['$scope', function($scope) {
* $scope.childProp = "Bar";
}]);
</script>
</body>
</html>
```

View File

@ -0,0 +1,34 @@
# .cadoles-slide-title[L'objet $scope (3/4)]
**Communication inter-controlleurs, évènements & propagation**
```html
<html>
<body ng-app="myApp">
<div ng-controller="ParentCtrl">
<div ng-controller="ChildCtrl">
</div>
</div>
<script src="angular.js"></script>
<script>
var myApp = angular.module('myApp', []);
myApp.controller('ParentCtrl', ['$scope', function($scope) {
* $scope.$on('child-event', function(evt) { console.log('Emitted event: ', evt); });
* $scope.$broadcast('parent-event', {data: 'Parent event !'});
}]);
myApp.controller('ChildCtrl', ['$scope', function($scope) {
* $scope.$emit('child-event', {data: 'Child event !'});
* $scope.$on('parent-event', function(evt) { console.log('Broadcasted event: ', evt); });
}]);
</script>
</body>
</html>
```

View File

@ -0,0 +1,29 @@
# .cadoles-slide-title[L'objet $scope (4/4)]
**Observer les modifications du $scope**
```html
<html>
<body ng-app="myApp">
<div ng-controller="MainCtrl">
<input ng-model="message" />
</div>
<script src="angular.js"></script>
<script>
var myApp = angular.module('myApp', []);
myApp.controller('MainCtrl', ['$scope', function($scope) {
$scope.message = '';
$scope.$watch('message', function(newVal, oldVal) {
console.log('"message" a changé !', newVal, oldVal);
});
}]);
</script>
</body>
</html>
```

19
javascript/angular/spa.md Normal file
View File

@ -0,0 +1,19 @@
# .cadoles-slide-title[Un changement de paradigme]
> **S.P.A.** Single Page Application
.cadoles-center[
<img src="./img/modeles_client_serveur.png" style="max-width:65%"/>
]
.cadoles-left-column.cadoles-small.cadoles-padded[
- L'état de l'application est géré côté serveur.
- Le rendu est géré côté serveur.
- Le client se place en simple terminal d'affichage de l'application.
]
.cadoles-left-right.cadoles-small.cadoles-padded[
- L'état de l'application est géré côté client.
- Le rendu est géré côté client.
- Le serveur se place en fournisseur de données.
]