Angular est un Framework open source écrit en JavaScript qui permet la création d’applications Web et plus particulièrement de ce qu’on appelle des  « Single Page Applications » : des applications web accessibles via une page web unique qui permet de fluidifier l’expérience utilisateur et d’éviter les chargements.

Développé par Google, Angular est un Framework open source écrit en JavaScript qui permet la création d’applications Web et plus particulièrement de ce qu’on appelle des  « Single Page Applications » : des applications web accessibles via une page web unique qui permet de fluidifier l’expérience utilisateur et d’éviter les chargements de pages à chaque nouvelle action. Le Framework est basé sur une architecture du type MVC et permet donc de séparer les données, le visuel et les actions pour une meilleure gestion des responsabilités. Un type d’architecture qui a largement fait ses preuves et qui permet une forte maintenabilité et une amélioration du travail collaboratif.

Loin de moi l’idée de faire du prosélytisme, ce n’est pas mon genre et je n’ai pas assez de recul et de connaissances sur les autres produits du marché pour m’aventurer là-dedans, mais je dois dire qu’Angular est un Framework solide, complet et homogène qui a l’avantage de ne pas nécessiter l’ajout de composants extérieurs pour son fonctionnement. Il est possible de faire nativement du routing, de l’AJAX ou encore du stockage en local contrairement à vue.js ou encore React qui reste au final une librairie destinée à développer des composants.

Aussi, le framework s’appuie sur Typescript, une surcouche au JavaScript développé par Microsoft, qui est un langage typé qui permet de créer des classes, des variables et des signatures de fonction. Et s’il est parfaitement possible d’utiliser du JavaScript natif avec Angular, l’utilisation de Typescript permet de mieux gérer les erreurs, d’avoir un code plus clair et aussi d’assurer une transition plus simple pour les développeurs PHP, Java ou encore C#.

Enfin, si Angular permet de développer des applications Web, il est également possible de faire des applications bureau ou encore des Progressive Web App en utilisant le même code ! Ce qui permet donc par exemple de développer un site web et une application mobile en même temps sans avoir à gérer deux projets en parallèle. Ce qui est loin d’être anodin.

Pour faire bref, le TypeScript est un sur-ensemble (un “superset”) de JavaScript qui est justement transcompilé (transcompilation : “traduction” d’un langage de programmation vers un autre – différent de la compilation, qui transforme généralement le code vers un format exécutable) en JavaScript pour être compréhensible par les navigateurs. Il ajoute des fonctionnalités extrêmement utiles, comme, entre autres :

  • le typage strict, qui permet de s’assurer qu’une variable ou une valeur passée vers ou retournée par une fonction soit du type prévu ;

  • les fonctions dites lambda ou arrow, permettant un code plus lisible et donc plus simple à maintenir ;

  • les classes et interfaces, permettant de coder de manière beaucoup plus modulaire et robuste.

Qu’est-ce que le CLI ?

Le CLI, ou “Command Line Interface” (un outil permettant d’exécuter des commandes depuis la console), d’Angular est l’outil qui vous permet d’exécuter des scripts pour la création, la structuration et la production d’une application Angular.

Installez les outils

Vous devez installer les outils suivants si vous ne les avez pas déjà sur votre machine :

NODE.JS
Téléchargez et installez la dernière version LTS de Node.js ici :

https://nodejs.org/en/download/

NPM
NPM est un package manager qui permet l’installation d’énormément d’outils et de libraries dont vous aurez besoin pour tout type de développement.  Pour l’installer, ouvrez une ligne de commande et tapez la commande suivante :

npm install -g npm@latest

ANGULAR/CLI
Vous allez maintenant installer le CLI d’Angular de manière globale sur votre machine avec la commande suivante (avec sudo si besoin) :

npm install -g @angular/cli

À partir de là, la commande  ng  est disponible depuis la ligne de commandes depuis n’importe quel dossier de l’ordinateur.

Pour créer un nouveau projet Angular, naviguez vers le dossier souhaité depuis une ligne de commande et saisissez la commande suivante :

ng new mon-premier-projet

Ensuite, naviguez dans le dossier du projet et lancez le serveur de développement :

cd mon-premier-projet
ng serve --open

Si tout se passe bien, vous verrez les informations du serveur qui se lance à l’adresse localhost:4200 et votre navigateur préféré se lancera automatiquement avec le message “Welcome to app!!” et le logo Angular.

Félicitations, votre environnement de développement est prêt !

Préparez le projet

Tout d’abord, créez un nouveau projet sur lequel vous travaillerez tout au long des chapitres suivants.  Depuis une ligne de commandes, naviguez vers votre dossier cible et tapez la commande suivante :

ng new mon-projet-angular --style=scss --skip-tests=true.

Le premier flag (élément de la commande suivant un double tiret –) crée des fichiers  .scss  pour les styles plutôt que des fichiers  .css .  Le second flag annule la création des fichiers test. Maintenant vous pouvez ouvrir le dossier  mon-projet-angular  depuis votre éditeur. Avant de plonger dans les différents dossiers, vous allez exécuter une commande pour installer Bootstrap dans votre projet.  Depuis le dossier  mon-projet-angular , avec une ligne de commande, tapez :

npm install bootstrap@3.3.7 --save.

Les components sont les composantes de base d’une application Angular : une application est une arborescence de plusieurs components.

Imaginez la page web suivante :

Exemple de page web

Tout d’abord, notre  AppComponent  est notre component principal : tous les autres components de notre application seront emboîtés ou “nested” dans celui-ci.

Pour cette structure, on peut imaginer un component pour la barre de menu, un autre pour la partie contenu et un dernier pour le menu à droite.  Il n’y a pas de règle d’or : je vous montrerai au cours des chapitres suivants comment réfléchir à votre structure afin de trouver la séparation des components la plus pertinente.

Vous allez maintenant créer un nouveau component à l’aide du CLI d’Angular.  Depuis le dossier principal de votre projet, tapez la commande suivante :

ng generate component mon-premier 

Comme vous le constaterez, le CLI a créé un nouveau sous-dossier  mon-premier  et y a créé un fichier template, une feuille de styles, un fichier component et un fichier spec : il s’agit d’un fichier de test que vous pouvez supprimer, car vous ne vous en servirez pas dans le cadre de ce cours.

Le databinding, c’est la communication entre votre code TypeScript et le template HTML qui est montré à l’utilisateur.  Cette communication est divisée en deux directions :

  • les informations venant de votre code qui doivent être affichées dans le navigateur, comme par exemple des informations que votre code a calculé ou récupéré sur un serveur.  Les deux principales méthodes pour cela sont le “string interpolation” et le “property binding” ;

  • les informations venant du template qui doivent être gérées par le code : l’utilisateur a rempli un formulaire ou cliqué sur un bouton, et il faut réagir et gérer ces événements.  On parlera de “event binding” pour cela.

Il existe également des situations comme les formulaires, par exemple, où l’on voudra une communication à double sens : on parle donc de “two-way binding”.

Pour votre application des appareils électriques, imaginez que si l’utilisateur est authentifié, on lui laisse la possibilité d’allumer tous les appareils de la maison.  Puisque l’authentification est une valeur globale, ajoutez une variable boolean dans  AppComponent , votre component de base (vous pouvez supprimer la variable  title  puisque vous ne l’utilisez plus) :import { Component } from ‘@angular/core’;

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
isAuth = false;
}

Les directives sont des instructions intégrées dans le DOM que vous utiliserez presque systématiquement quand vous créerez des applications Angular.  Quand Angular lit votre template et rencontre une directive qu’il reconnait, il suit les instructions correspondantes.  

Il existe deux types principaux de directive : les directives structurelles et les directives par attribut.

Les directives structurelles

Ce sont des directives qui, comme leur nom l’indique, modifient la structure du document.  Dans ce chapitre, vous allez en découvrir deux (il en existe d’autres) :  *ngIf  , pour afficher des données de façon conditionnelle, et  *ngFor , pour itérer des données dans un array, par exemple.

*ngIf

Un component auquel on ajoute la directive  *ngIf="condition"  ne s’affichera que si la condition est “truthy” (elle retourne la valeur  true  où la variable mentionnée est définie et non-nulle), comme un statement  if  classique.

Pour une démonstration simple, ajoutez une  <div>  rouge qui ne s’affichera que si l’appareil est éteint :

<li class="list-group-item">
<div style="width:20px;height:20px;background-color:red;"
*ngIf="appareilStatus === 'éteint'"></div>
<h4>Appareil : {{ appareilName }} -- Statut : {{ getStatus() }}</h4>
<input type="text" class="form-control" [(ngModel)]="appareilName">
</li>

*ngFor

Lorsque l’on ajoute la directive  *ngFor="let obj of myArray"  à un component, Angular itérera l’array  myArray  et affichera un component par objet  obj .  Pour en comprendre l’utilisation, je vous propose de modifier la façon dont votre application génère des appareils électriques.

On peut imaginer que votre application récupère, depuis un serveur, un array contenant tous les appareils et leurs états.  Pour l’instant, créez cet array directement dans  AppComponent  :

export class AppComponent {
isAuth = false;
appareils = [
{
name: 'Machine à laver',
status: 'éteint'
},
{
name: 'Frigo',
status: 'allumé'
},
{
name: 'Ordinateur',
status: 'éteint'
}
];

Vous avez un array avec trois objets, chaque objet ayant une propriété  name  et une propriété  status .  Vous pourriez même créer une interface ou une class TypeScript  Appareil , mais dans ce cas simple ce n’est pas nécessaire.

Maintenant la magie  *ngFor  :

<div class="container">
<div class="row">

<div class="col-xs-12">

<h2>Mes appareils</h2>
<ul class="list-group">
<app-appareil *ngFor="let appareil of appareils"
[appareilName]="appareil.name"
[appareilStatus]="appareil.status"></app-appareil>
</ul>
<button class="btn btn-success"
[disabled]="!isAuth"
(click)="onAllumer()">Tout allumer</button>
</div>
</div>
</div>

Le statement  let appareil of appareils , comme dans une for loop classique, itère pour chaque élément  appareil  (nom arbitraire) de l’array  appareils  .  Après cette directive, vous pouvez maintenant utiliser l’objet  appareil , dont vous connaissez la forme, à l’intérieur de cette balise HTML.  Vous pouvez donc utiliser le property binding, et y passer les propriétés  name  et  status  de cet objet.

Les directives par attribut

À la différence des directives structurelles, les directives par attribut modifient le comportement d’un objet déjà existant.  Vous avez déjà utilisé une directive de ce type sans le savoir : la directive  ngModel  que vous avez employée pour le two-way binding, qui modifie la valeur du  <input>  et répond à tout changement qu’on lui apporte.  Je vais vous montrer deux autres exemples très utiles :  ngStyle  et  ngClass , qui permettent d’attribuer des styles ou des classes de manière dynamique.

ngStyle

Cette directive permet d’appliquer des styles à un objet du DOM de manière dynamique. Imaginez que, pour l’application des appareils électriques, vous souhaitiez modifier la couleur du texte selon si l’appareil est allumé ou non, disons vert pour allumé, rouge pour éteint.   ngStyle  vous permet de faire cela :

<h4 [ngStyle]=“{color: getColor()}”>Appareil : {{ appareilName }} — Statut : {{ getStatus() }}</h4>

ngStyle  prend un objet JS de type clé-valeur, avec comme clé le style à modifier, et comme valeur la valeur souhaitée pour ce style. Ici, vous faites appel à une fonction getColor()  dans  AppareilComponent  que vous allez maintenant créer :

getColor() {
if(this.appareilStatus === 'allumé') {
return 'green';
} else if(this.appareilStatus === 'éteint') {
return 'red';
}
}
Cette fonction retourne la valeur  'green'  si l’appareil est allumé, et  'red'  s’il est éteint, modifiant ainsi la couleur du texte dans le template.

ngClass

Au-delà de modifier des styles directement, il peut être très utile d’ajouter des classes CSS à un élément de manière dynamique.  Comme  ngStyle ,  ngClass  prend un objet clé-valeur, mais cette fois avec la classe à appliquer en clé, et la condition en valeur.

Pour cet exemple, je vous propose d’appliquer des classes Bootstrap à la balise  <li>  en fonction du statut de l’appareil :

<li [ngClass]="{'list-group-item': true,
 'list-group-item-success': appareilStatus === 'allumé',
 'list-group-item-danger': appareilStatus === 'éteint'}">
<div style="width:20px;height:20px;background-color:red;"
*ngIf="appareilStatus === 'éteint'"></div>
<h4 [ngStyle]="{color: getColor()}">Appareil : {{ appareilName }} -- Statut : {{ getStatus() }}</h4>
<input type="text" class="form-control" [(ngModel)]="appareilName">
</li>

Angular appliquera donc systématiquement la classe  list-group-item , et selon le contenu de la variable  appareilStatus , appliquera l’une ou l’autre des deux autres classes.  Vous pouvez bien évidemment créer vos propres classes et les utiliser ; j’ai simplement choisi des classes Bootstrap pour simplifier l’explication.

Dans AngularJS, un service est une fonction, ou un objet, disponible et limité à votre application AngularJS.

AngularJS a environ 30 services intégrés. L’un d’eux est le $location service.

Le $locationservice dispose de méthodes qui renvoient des informations sur l’emplacement de la page Web actuelle:

Exemple

Utilisez le $locationservice dans un contrôleur:

var app = angular.module('myApp', []);
app.controller('customersCtrl'function($scope, $location) {
    $scope.myUrl = $location.absUrl();
});

Pour de nombreux services, comme le $locationservice, il semble que vous puissiez utiliser des objets qui sont déjà dans le DOM, comme l’ window.location objet, et vous le pouvez, mais cela aurait certaines limitations, au moins pour votre application AngularJS.

AngularJS supervise constamment votre application, et pour qu’elle gère correctement les changements et les événements, AngularJS préfère que vous utilisiez le $location service au lieu de l’ window.locationobjet.

Pour créer votre propre service, connectez votre service au module:

Créez un service nommé hexafy:

app.service('hexafy'function() {
  this.myFunc = function (x) {
    return x.toString(16);
  }
});

Pour utiliser votre service personnalisé, ajoutez-le en tant que dépendance lors de la définition du contrôleur:

Exemple

Utilisez le service personnalisé nommé hexafypour convertir un nombre en nombre hexadécimal:

app.controller('myCtrl'function($scope, hexafy) {
  $scope.hex = hexafy.myFunc(255);
});

Les formulaires dans AngularJS fournissent la liaison de données et la validation des contrôles d’entrée.


Contrôles d’entrée

Les contrôles d’entrée sont les éléments d’entrée HTML:

  • éléments d’entrée
  • sélectionner des éléments
  • éléments de bouton
  • éléments textarea

Liaison de données

Les contrôles d’entrée fournissent une liaison de données à l’aide de la ng-modeldirective.

<input type=”text” ng-model=”firstname”>

L’application a maintenant une propriété nommée firstname.

La ng-modeldirective lie le contrôleur d’entrée au reste de votre application.

La propriété firstname, peut être référencée dans un contrôleur:

Exemple
<script>
var app = angular.module('myApp', []);
app.controller('formCtrl'function($scope) {
  $scope.firstname = "John";
});
</script>
 

Le ngRoutemodule aide votre application à devenir une application à page unique.


Qu’est-ce que le routage dans AngularJS?

Si vous souhaitez naviguer vers différentes pages de votre application, mais que vous souhaitez également que l’application soit une SPA (application à page unique), sans rechargement de page, vous pouvez utiliser le ngRoutemodule.

Le ngRoutemodule achemine votre application vers différentes pages sans recharger l’ensemble de l’application.

Exemple:

Accédez à “red.htm”, “green.htm” et “blue.htm”:

<body ng-app="myApp">
<p><a href="#/!">Main</a></p>
<a href="#!red">Red</a>
<a href="#!green">Green</a>
<a href="#!blue">Blue</a>
<div ng-view></div>
<script>
var app = angular.module("myApp", ["ngRoute"]);
app.config(function($routeProvider) {
  $routeProvider
  .when("/", {
    templateUrl : "main.htm"
  })
  .when("/red", {
    templateUrl : "red.htm"
  })
  .when("/green", {
    templateUrl : "green.htm"
  })
  .when("/blue", {
    templateUrl : "blue.htm"
  });
});
</script>
</body>
juin 2026
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930 

Articles récents

Archives

Défilement vers le haut