Développement d’applications d’entreprise 2

Angular est un framework de développement web open source maintenu par Google qui encadre le développement d'expériences utilisateur riches sur différentes plateformes: web, PWA, mobile natif et application de bureau.

  • AngularJS?

Caractéristiques

  • Structure imposante et rigide
  • Orienté vers les Single Page Application
  • templating et data-binding
  • Encapsulation sous forme de components
  • Modulaire via l'injection de dépendances
  • Navigation/Routes front-end
  • Communauté active

Exemple d'application

Hierarchie des components
+----------------------------------------------+
|App { <----------------+ |
| | |
| name: string | |
| | |
| (click) => alert | |
| | (confirmed) |
| Scoped CSS | |
| | |
|} | |
| | |
| | |
| +--------+-------------------+ |
| |Input { | |
| | | |
| | name: string | |
| | | |
| | (click) => emit confirmed | |
| | | |
| | [(name)] => p | |
| | | |
| |} | |
| | | |
| +----------------------------+ |
| |
+----------------------------------------------+
Ouvrir

Environnement de développement

On utilise le langage TypeScript, combiné aux outils de l'écosystème JavaScript modernes:

Prise en main

Votre objectif est de réaliser le tutoriel d'introduction officiel d'Angular. Pour vous favoriser le développement de votre compréhension, des questions/réflexions vous accompagneront au fil de la démarche.

👉 Angular First App

ATTENTION

Suite à la réalisation des étapes du tutoriel(sauf la dernière portant sur HTTP), vous devrez ajouter des fonctionnalités supplémentaires décrites dans le laboratoire 1. Il serait pertinent de survoler le travail attendu avant de compléter le tutoriel.

Introduction

Requis et versions?


Extra

bash
# Pour permettre le live-reload sans depasser le nombres de fichiers a surveiller

su - -c "echo fs.inotify.max_user_watches=524288 | tee -a /etc/sysctl.conf && sysctl -p"


Valider l'installation?
bash
node -v
npm -v
ng version # version actuelle?

# et plus?

Hello World!

ATTENTION

Pour cette étape, utiliser un nouveau projet généré localement sur votre machine.

  • Copier le contenu du fichier src/app/app.component.ts vers votre fichier correspondant
SSG, SSR, Pre-rendering? Optimisation avancée

Accéder au serveur à l'externe? ng serve

Les autres fichiers, app.component.xyz? Structure des components
Style Scoping
Templates

Components standalone vs NgModule Decorator @component
NgModule

Create home component & Create housing location component

Plusieurs fichiers? Personaliser le générateur pour contrôler la structure créée
bash
ng g c home -t -s --skip-tests --type page

# Flat
ng g c my/directory/home --flat -t -s --skip-tests --type page

  • Profitez-en pour faire le ménage des fichiers inutilisés app.component.___
    • Attention de mettre à jour les utilisations des items supprimés
Une balise app-home? Selectors

Create an interface

Models?

On peut voir l'interface comme la forme primitive d'un model pour encadre la structurer des données

bash
ng g i models/location --type interface

Organisation des fichiers?

Commencer à réfléchir à l'organisation judicieuses des fichiers à l'intérieur de votre projet.

Par type
src
├── app
│   ├── app.component.ts
│   ├── app.config.ts
│   ├── app.routes.ts
│   ├── housing
│   │   ├── housing.page.ts
│   │   └── location.component.ts
│   ├── models
│   │   └── location.interface.ts
│   └── services
│   └── housing.service.ts
├── index.html
├── main.ts
└── styles.css

Par fonctionnalité
src
├── app
│   ├── app.component.ts
│   ├── app.config.ts
│   ├── app.routes.ts
│   ├── housing
│   │   ├── housing.page.ts
│   │ └── housing.service.ts
│   └── location
│      ├── location.interface.ts
│      └── location.component.ts
├── index.html
├── main.ts
└── styles.css

Input parameter & Property binding & Dynamic Values

Debugger les valeurs?

Les pipes permettent d'appliquer une transformation directement dans les templates

angular
template: `
<p>it works! </p>

{{ someVariable | json }}
`
,

Debugger la mise en page?

Pour simuler une liste de plusieurs locations, dupliquer le component

angular
template: `
<div>
<app-location></app-location>
<app-location></app-location>
<app-location></app-location>
</div>
`
,

*ngFor

Directives vs Block? Directives Blocks

Services

Injection de dépendances?

Attention, 2 méthodes: constructors et inject

DI

Add routing

Attention La structure du nouveau projet créé précédemment est différente du tutoriel, assurez-vous de transposer correctement les modifications.

Testez la navigation via la barre d'adresse vers /details/xyz.

Redémarrage du serveur?

Les changements aux configurations TypeScript, Angular, Application demandent de redémarrer le serveur de développement.

Details page

Attribut brut vs binding?
html
<a routerLink="/details/{{ location.id }}">Details</a>

<!-- VS -->

<a [routerLink]="['/details', location.id]">Details</a>

<!-- ??? -->

<a href="/details/{{ location.id }}">Details</a>

Integrate Forms

Ajouter un alert de la représentation JSON des données du formulaire.

Reactive vs Template? Forms

(...)? Events

Add search

Supporter la touche Enter?

Utiliser l'événement submit du formulaire plutôt que le click du bouton

HTTP

Ne PAS faire!