JavaScript et Angular
Des bases du langage au développement d'une application web
Éditions ENI
Avant-propos
Partie 1 : JavaScript
Chapitre 1
Historique
1. Internet17
1.1 Un réseau pour les lier tous17
1.2 TCP/IP18
1.3 Navigateurs et WWW18
2. JavaScript19
2.1 Valider un formulaire19
2.2 ECMAScript20
2.3 DOM20
2.4 Déclinaisons20
2.5 JavaScript et le web21
3. Angular23
3.1 AngularJS23
3.2 Angular 223
3.3 Versions suivantes25
Chapitre 2
Installation
1. Introduction27
2. Visual Studio Code28
2.1 Installation29
2.1.1 Windows29
2.1.2 Linux30
2.2 Interface31
3. Google Chrome32
4. git33
5. Node.js34
6. npm35
7. Angular CLI37
8. Structure de cet ouvrage38
Chapitre 3
Types de données
1. Commandes Git41
2. Introduction41
3. Déclaration de variable42
4. Nombres45
4.1 Types de nombres45
4.2 Opérations élémentaires46
4.3 Nombres à virgule47
4.4 Syntaxe simplifiée47
4.4.1 Incrémentation et décrémentation47
4.4.2 Opérations mathématiques courantes47
5. Chaînes de caractères48
5.1 Déclaration et initialisation48
5.2 Concaténation49
6. Tableaux50
6.1 Déclaration et initialisation50
6.2 Accès51
6.3 Modification51
6.4 Fonctions utiles52
6.4.1 push et unshift52
6.4.2 pop et shift53
6.4.3 indexOf54
7. Mise en pratique54
7.1 Énoncé54
7.2 Correction55
Chapitre 4
Boucles et conditions
1. Commandes Git57
2. Conditions57
2.1 Opérateurs logiques57
2.1.1 ET58
2.1.2 OU58
2.1.3 NON58
2.1.4 Évaluation58
2.1.5 Priorité des opérations60
2.2 Syntaxe61
2.2.1 if61
2.2.2 if... else61
2.2.3 Opérateur ternaire62
2.2.4 switch62
3. Boucles65
3.1 while65
3.1.1 Syntaxe65
3.1.2 Vers l'infini et au-delà66
3.1.3 Exemple66
3.1.4 Version alternative67
3.2 for68
3.2.1 Syntaxe68
3.2.2 FizzBuzz68
3.2.3 Optimisation pour les indices de listes et d'objets70
4. Mise en pratique71
4.1 Énoncé71
4.2 Correction72
Chapitre 5
Fonctions
1. Commandes Git75
2. Introduction75
3. Fonctions simples76
3.1 Syntaxe76
3.2 Portées77
3.2.1 Portée globale77
3.2.2 Portée locale78
4. Fonctions et arguments80
4.1 Syntaxe de fonction avec arguments80
4.2 Appel de fonction avec arguments80
4.3 Valeur par défaut des arguments81
4.4 Nombre d'arguments indéfini83
5. Retour84
5.1 Syntaxe84
5.2 Utilisation d'un retour de fonction85
6. Fonctions ou méthodes87
7. Mise en pratique88
7.1 Énoncé88
7.2 Correction89
Chapitre 6
JavaScript orienté objet
1. Commandes Git93
2. Définition93
3. Création d'un objet94
4. Bob le constructeur95
5. Propriétés et méthodes99
6. Classes100
6.1 Constructeur100
6.2 Méthodes101
6.2.1 Getters et setters101
6.2.2 Méthodes et attributs statiques104
7. Mise en pratique105
7.1 Énoncé105
7.1.1 Pokémon105
7.1.2 Attaque106
7.1.3 Combat106
7.2 Correction107
7.2.1 Pokémon108
7.2.2 Attaque109
7.2.3 Combat110
Chapitre 7
TypeScript
1. Commandes Git119
2. Historique119
3. Intégrer TypeScript à un projet web120
3.1 npm120
3.2 Création d'un fichier TypeScript121
4. Typage121
4.1 JavaScript et les erreurs de typage121
4.2 TypeScript et le typage122
4.3 Erreurs de compilation123
4.4 Types124
5. Énumérations125
5.1 Déclaration125
5.2 Utilisation d'une variable de type énumération125
6. Fonctions126
6.1 Généralités126
6.2 Fonctions particulières127
6.2.1 Fonctions anonymes127
6.2.2 Fonctions lambda ou fléchées127
7. Classes et héritage128
7.1 Classe minimale128
7.2 Attributs128
7.3 Accesseurs129
7.4 Constructeur131
7.5 Méthodes132
7.6 Héritage134
8. Modules137
9. Mise en pratique139
9.1 Énoncé139
9.2 Correction140
Partie 2 : Angular
Chapitre 8
Angular CLI - Composants
1. Commandes Git145
2. Introduction145
3. Création d'une nouvelle application Angular147
3.1 Génération d'un nouveau projet avec AngularCLI147
3.2 Architecture d'un projet généré149
4. Composants150
4.1 Classe TypeScript150
4.2 Décorateur151
4.3 Métadonnées152
4.4 Ajout dans le module principal152
4.5 Utilisation d'un composant154
5. Angular CLI et la création de composants154
5.1 Génération d'un composant avec AngularCLI154
5.2 Méthodes intervenant dans le cycle de vie d'un composant Angular156
6. Mise en pratique156
6.1 Énoncé156
6.2 Correction157
Chapitre 9
Gabarits
1. Commandes Git161
2. Introduction161
3. Bootstrap162
4. Interpolation163
5. Événements166
6. Directives168
6.1 Directives de structure169
6.1.1 Conditions169
6.1.2 Itérations171
6.1.3 Choix multiples173
6.2 Directives de données173
6.2.1 Classes173
6.2.2 Style177
7. Mise en pratique180
7.1 Énoncé180
7.2 Correction181
Chapitre 10
Mise en forme dans les gabarits
1. Commandes Git185
2. Introduction185
3. Tuber des chaînes de caractères186
4. Tuber des nombres187
4.1 DecimalPipe188
4.2 PercentPipe189
4.3 CurrencyPipe190
5. Tuber une date191
6. Tuber un objet ou un dictionnaire192
6.1 KeyValuePipe192
7. Tuber un tableau ou une chaîne de caractères194
7.1 SlicePipe194
8. Tuber des objets provenant d'API externes195
8.1 JsonPipe195
8.2 AsyncPipe196
9. Mise en pratique197
9.1 Énoncé197
9.2 Correction198
Chapitre 11
Hiérarchie des composants
1. Commandes Git205
2. Architecture hiérarchique205
3. Transmission père-fils207
4. Transmission fils-père210
5. Mise en pratique212
5.1 Énoncé212
5.2 Correction214
Chapitre 12
Services
1. Commandes Git219
2. Introduction219
3. Dépendances220
4. Services221
5. Exemple de service223
6. CRUD et les services225
7. Mise en pratique228
7.1 Énoncé228
7.2 Correction229
Chapitre 13
Formulaires
1. Commandes Git233
2. Introduction233
3. Créer un formulaire HTML234
4. Créer un formulaire Angular235
4.1 Méthode 1 : à l'intérieur d'un gabarit236
4.1.1 FormsModule236
4.1.2 Interpolation237
4.1.3 Lier le formulaire à un modèle240
4.2 Méthode 2 : à l'intérieur d'une classe TypeScript243
4.2.1 ReactiveFormsModule243
4.2.2 Créer un formulaire TypeScript244
4.2.3 Lier chaque champ HTML au formulaire TypeScript246
4.2.4 FormBuilder248
5. Soumettre un formulaire248
6. Mise en pratique250
6.1 Énoncé250
6.2 Correction252
Chapitre 14
Gestion avancée des formulaires
1. Commandes Git257
2. Introduction257
3. Validation des champs de saisie258
3.1 Dans un formulaire basé sur un template258
3.2 Dans un formulaire basé sur une classe TypeScript261
4. Validateurs personnalisés263
5. Mise en forme selon les validateurs266
5.1 NgModel et ses booléens de comportement266
5.2 Mise en forme selon validateurs266
5.2.1 Signaler une erreur dans un champ par un message267
5.2.2 Encadrer un champ267
6. Mise en pratique270
6.1 Énoncé270
6.2 Correction272
Chapitre 15
Routage
1. Commandes Git277
2. Introduction277
3. Angular CLI et le routage278
4. href ! = routerLink278
5. app-routing.module.ts280
6. Routes282
6.1 Route joker282
6.2 Routes paramétrées284
6.2.1 Navigation dans le gabarit287
6.2.2 Navigation dans le composant TypeScript288
6.2.3 Utilisation du paramètre de l'URL dans un composant289
7. Hiérarchie dans les routes291
7.1 Création de quatre composants291
7.2 Routes enfants294
7.3 Mise en place des composants enfants295
8. Permissions296
9. Mise en pratique300
9.1 Énoncé300
9.2 Correction300
Chapitre 16
Programmation réactive
1. Commandes Git303
2. Introduction303
3. Promesse304
3.1 Instancier une promesse304
3.2 Fonction de rappel306
4. Observable308
4.1 Généralités308
4.2 rxjs309
5. HTTP : HyperText Transfer Protocol311
6. Mise en pratique315
6.1 Énoncé315
6.1.1 Générations315
6.1.2 Pokémons316
6.2 Correction318
6.2.1 Générations318
6.2.2 Pokémons321
Chapitre 17
Tests unitaires
1. Commandes Git327
2. Introduction327
3. Jasmine328
3.1 Tests unitaire basiques330
3.2 Fixture331
3.3 Lancer les tests unitaires332
4. Tests unitaires d'un composant Angular334
4.1 Classe TypeScript334
4.2 Gabarit336
4.3 Dépendances338
5. Karma341
6. Couverture de code342
7. Mise en pratique346
7.1 Énoncé346
7.2 Correction347
Chapitre 18
Tests de bout en bout
1. Commandes Git355
2. Introduction355
3. Protractor356
3.1 Objet page358
3.2 Test e2e359
4. Tester les actions utilisateurs360
4.1 Modifier l'objet page361
4.2 Ajouter deux tests363
5. Et à part cliquer ?364
5.1 Au niveau du navigateur364
5.2 Au niveau d'un élément365
6. Cas concret : une liste et des boutons365
7. Mise en pratique369
7.1 Énoncé369
7.2 Correction369
7.2.1 Page principale369
7.2.2 Page Générations371
7.2.3 Page Pokémons372
7.2.4 Lancement des tests374
Chapitre 19
Outils complémentaires
1. Introduction375
2. Compodoc375
2.1 Installation376
2.2 Génération377
3. WakaTime379
3.1 Fonctionnement379
3.2 Installation379
3.3 Badge381
4. Travis381
4.1 Configuration382
4.2 Navigateurs web sans interface graphique383
4.3 Tuning384
4.4 Une intégration, plusieurs actions386
4.5 Badge387
5. Codacy387
5.1 Plug-in GitHub387
5.2 codacy.com388
5.3 Configuration389
5.4 Badge390
6. Firebase391
6.1 Prérequis391
6.1.1 Firebase > Angular393
6.1.2 Angular > Firebase394
6.2 Authentification395
6.2.1 Modes de connexion395
6.2.2 Service Angular d'authentification395
6.3 Connexion à une base de données Firebase398
6.3.1 Création de la base de données399
6.3.2 Définition du modèle399
6.3.3 Implémentation du service400
7. Code Konami402
Index405