Angular - Front-End Framework

Tags :
  • POK
  • 2024-2025
  • temps 2
  • vert
  • Dev
  • Web
  • Angular
Auteurs :
  • Titouan Corne

Une des missions de mon stage de fin d'études consistera à développer un outil interne en Angular. Ce framework proposé par les équipes de Google permet de faire du développement Front-End. C'est pourquoi, je vais consacrer ce POK au développement Angular en créant un site internet de cuisine appelé **Miam'Miam** (mes recettes, feedback, ...).

Des connaissances en développement web sont nécessaires (HTML, CSS, JavaScript/TypeScript)

  • Doc officielle : Angular
  • Projets Github :
    • firstApp - projet dédié à la prise en main d'Angular via les tutos.
    • Miam'Miam - projet du site de cuisine.

Tâches

Sprints

But final : Développer un site web de cuisine en Angular.

Sprint 1

Analyse post-mortem (Sprint 1) :

Ce premier temps de 10 heures m'a permis de découvrir Angular. J'ai pris le temps de suivre l'intégralité des tutoriels disponibles sur leur site. Cela m'a aidé à me familiariser avec les nombreuses notions évoquées au cours de ces exercices. J'ai particulièrement apprécié le fait que ces tutoriels soient bien guidés : je n'ai, à aucun moment, été bloqué.

Je suis satisfait de mon avancement, qui correspond exactement aux objectifs que je m'étais fixés. Ma To-Do list est désormais plus explicite et précise que celle de mon POK1, et c'est une nette amélioration. Le fait d'avoir des tâches bien définies me sera très utile pour le second sprint, qui sera entièrement dédié au développement.

En ce qui concerne la gestion de mon temps de travail, j'ai uniquement précisé, dans la table d'horodatage, le temps effectivement travaillé. Cependant, le temps de restitution sur le site Do-It m'a pris environ 1h30 supplémentaires.

J'ai hâte de commencer à développer mon propre site, place à la créativité !

Sprint 2

Analyse post-mortem (Sprint 2) :

Horodatage

Date Heures passées Indications
Mercredi 13/11 1H00 Partie Essentials (tâche 2)
Mercredi 13/11 1H00 Partie Essentials (tâche 2)
Vendredi 15/11 2H00 Partie Start coding! - Learn Angular in your browser (tâche 3.1)
Samedi 16/11 2H00 Partie Start coding! - Build your first app locally (tâche 3.2)
Dimanche 17/11 2H00 Partie Start coding! - Build your first app locally (tâche 3.2)
Dimanche 17/11 0H30 Partie Start coding! - Deferrable Views (tâche 3.3)
Mardi 19/11 0H30 Partie Créer un cahier des charges du site internet (tâche 4)
Mardi 19/11 1H00 Partie Créer une maquette du site internet (tâche 5)

Contenu

Table des matières

  1. Installation d'Angular
  2. Les composants
  3. Cahier des charges du site de cuisine Miam'Miam

1. Installation d'Angular

Il faut préalablement avoir Node.js, un IDE (Environnement de Développement Intégré) et un terminal.

Dans un premier temps, il faut installer Angular CLI (Command Line Interface) qui facilite le développement d'applications avec le framework Angular. Angular CLI permet de générer, configurer, développer, tester et déployer des applications Angular de manière efficace, sans se soucier des configurations complexes ou des tâches répétitives. npm install -g @angular/cli

Ensuite, il faut créer un nouveau projet Angular à l'aide de la commande : ng new <project-name> Il est alors possible de choisir les configurations souhaitées pour le projet.

Le projet est alors créé. Une fois dans le dossier du projet, vous pouvez lancer votre site en local en utilisant la commande ng serve.

Voici l'arborescence de fichiers obtenue :

organisation projet Angular Illustration personnelle (2024)

2. Les composants

Un composant ou component est une unité modulaire de code qui combine un template (structure HTML), du code TypeScript (logique), et des styles CSS pour représenter et gérer une partie de l'interface utilisateur.

Chaque composant Angular est associé à une partie spécifique de l'interface de l'application, et ces composants peuvent être imbriqués les uns dans les autres pour construire des interfaces complexes.

Pour créer un composant, il existe la commande : ng generate component <nom-composant>.

Par exemple, lorsqu'on crée un composant hello, on obtient un nouveau dossier comme suit :

création d'un composant hello Capture d'écran personnelle (2024).

Pour définir le comportement d'un composant ou encore ses données, on utilise l'état ou state. Ce state représente tout ce que le composant "sait" à un moment donné et qui est susceptible de changer au fil du temps, en réponse à des événements utilisateur, des interactions avec des services, ou d'autres actions. Voici, un exemple avec les deux propriétés taskTitle et isComplete :

@Component({ ... })
export class TodoListItem {
  taskTitle = '';
  isComplete = false;
}

Pour modifier cet état, on peut définir des méthodes à l'intérieur de ce 'class component' en veillant à bien utiliser le mot this :

@Component({ ... })
export class TodoListItem {
  taskTitle = '';
  isComplete = false;
  completeTask() {
    this.isComplete = true;
  }
  updateTitle(newTitle: string) {
    this.taskTitle = newTitle;
  }
}

Pour afficher du contenu dynamique dans le template (i.e. le rendu html), on utilise des doubles accolades : <p> Title : {{taskTitle}} </p> . Ainsi lorsque la valeur de taskTitle changera, Angular modifiera le DOM (Document Object Model) pour que le fichier HTML affiche correctement la nouvelle valeur.

Similairement, on peut définir des propriétés CSS de façon dynamique en utilisant des crochets :

@Component({
  selector: 'sign-up-form',
  template: `
    <button type="submit" [disabled]="formIsInvalid">Submit</button>
  `
})
export class SignUpForm {
  formIsInvalid = true;
}

Il est également possible d'utiliser des conditions if, voici un exemple :

@Component({
  standalone: true,
  selector: 'user-controls',
  template: `
    @if (isAdmin) {
      <button>Erase database</button>
    } @else {
      <p>You are not authorized.</p>
    }
  `,
})
export class UserControls {
  isAdmin = true;
}

Il est aussi possible d'utiliser des boucles for :

@Component({
  standalone: true,
  selector: 'user-controls',
  template: `
    <ul>
      @for (ingredient of ingredientList; track ingredient.name) {
        <li> {{ ingredient.quantity }} - {{ ingredient.name }}</li>
      }
    </ul>
  `,
})
export class IngredientList {
  ingredientList = [
    {name: 'noodles', quantity: 1},
    {name: 'miso broth', quantity: 1},
    {name: 'egg', quantity: 2},
  ];
}

On remarque la présence de la propriété track qui correspond à un identifiant unique qu'il faut préciser pour qu'Angular traite correctement chaque élément d'une liste. Nous avions vu qu'il y avait cette même propriété en React, présente sous le nom key (cf projets de mon MON 2.1).

J'ai églament appris de nouveaux concepts sur lesquels, je ne vais pas m'attarder :

@defer (on viewport) {
      <comments />
      } @placeholder {
      <p>Future comments</p>
      } @loading (minimum 2s) {
      <p>Loading comments...</p>
      }
@Component({
    ...
    template: `<button (click)="greet()">`
})
class AppComponent {
    greet() {
        console.log('Hello !');
    }
}
<section class="results">
    <app-housing-location
    *ngFor="let housingLocation of housingLocationList"
    [housingLocation]="housingLocation"
    ></app-housing-location>
</section>
  <form>
    <input type="text" placeholder="Filter by city" #filter/>
    <button class="primary" type="button" (click)="filterResults(filter.value)">Search</button>
  </form>

3. Cahier des charges du site de cuisine Miam'Miam

Cahier des charges - 1 Cahier des charges - 2