Skip to content

Commit 9a869ad

Browse files
authored
docs(fr): add french translations for angular easy challenges (tomalaforge#938)
1 parent 1cf6e42 commit 9a869ad

File tree

7 files changed

+259
-0
lines changed

7 files changed

+259
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
title: 🟢 Projection
3+
description: Le challenge 1 consiste à apprendre à projeter des éléments DOM à travers des composants
4+
author: thomas-laforge
5+
contributors:
6+
- alannelucq
7+
challengeNumber: 1
8+
command: angular-projection
9+
blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5
10+
videoLink:
11+
link: https://www.youtube.com/watch?v=npyEyUZxoIw&ab_channel=ArthurLannelucq
12+
alt: Projection video by Arthur Lannelucq
13+
flag: FR
14+
sidebar:
15+
order: 1
16+
---
17+
18+
## Information
19+
20+
Dans Angular, la projection de contenu est une technique puissante pour créer des composants hautement personnalisables. Utiliser et comprendre les concepts liés aux <b>ng-content</b> et <b>ngTemplateOutlet</b> peut grandement améliorer votre capacité à créer des composants réutilisables.
21+
22+
Vous pouvez tout apprendre sur <b>ng-content</b> [ici](https://angular.dev/guide/components/content-projection), de la projection de contenu la plus simple jusqu'à des utilisations plus complexes.
23+
24+
Pour en savoir plus sur <b>ngTemplateOutlet</b>, vous pouvez trouver la documentation de l'API [ici](https://angular.io/api/common/NgTemplateOutlet) avec quelques exemples de base.
25+
26+
Avec ces deux outils en main, vous êtes maintenant prêt à relever le défi.
27+
28+
## Énoncé
29+
30+
Vous commencerez avec une application entièrement fonctionnelle qui comprend un tableau de bord contenant une carte pour les enseignants et une carte pour les élèves. L'objectif est de mettre en place la carte de la ville.
31+
32+
Bien que l'application fonctionne, l'expérience développeur est loin d'être optimale. Chaque fois que vous devez implémenter une nouvelle carte, vous devez modifier le `card.component.ts`. Dans des projets réels, ce composant pourrait être partagé entre de nombreuses applications. Le but du défi est de créer un `CardComponent` qui peut être personnalisé sans aucune modification. Une fois que vous aurez créé ce composant, vous pourrez commencer à implémenter le `CityCardComponent` et vous assurer de ne pas toucher au `CardComponent`.
33+
34+
## Contraintes
35+
36+
- Vous <b>devez</b> refactoriser le `CardComponent` et le `ListItemComponent`.
37+
- La directive `NgFor` doit être déclarée et rester à l'intérieur du `CardComponent`. Vous pourriez être tenté de la déplacer dans le `ParentCardComponent` comme `TeacherCardComponent`.
38+
- Le composant `CardComponent` ne doit contenir aucun `NgIf` ni `NgSwitch`.
39+
- CSS: essayez d'éviter d'utiliser `::ng-deep`. Trouvez un meilleur moyen de gérer le style CSS.
40+
41+
## Challenges Bonus
42+
43+
- Essayez de travailler avec la nouvelle syntaxe de contrôle de flux pour les boucles et les conditions (documentation [ici](https://angular.dev/guide/templates/control-flow))
44+
- Utilisez l'API des signals pour gérer l'état de vos composants (documentation [ici](https://angular.dev/guide/signals))
45+
- Pour référencer le template, utilisez une directive au lieu d'une magic string ([Qu'est-ce qui pose problème avec les magic string ?](https://softwareengineering.stackexchange.com/a/365344))
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
title: 🟢 Naviguer sur une page
3+
description: Le challenge 21 consiste à apprendre à utiliser la navigation intégrée d'Angular
4+
author: thomas-laforge
5+
contributors:
6+
- alannelucq
7+
challengeNumber: 21
8+
command: angular-anchor-navigation
9+
sidebar:
10+
order: 4
11+
---
12+
13+
## Information
14+
15+
Vous commencez avec une application qui possède une navigation de base et une navigation par ancre dans le `HomeComponent`. Cependant, l'utilisation de `href` recrée le chemin à chaque fois et rafraîchit la page.
16+
17+
## Énoncé
18+
19+
- Votre tâche consiste à refactoriser cette application pour utiliser la navigation intégrée afin de mieux s'intégrer dans le Framework Angular. Vous pouvez explorer le router, mais il est préférable de rester dans le template et d'utiliser la directive `RouterLink`.
20+
- Pour améliorer l'expérience utilisateur, ajoutez un scroll fluide.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
---
2+
title: 🟢 @RouterInput()
3+
description: Challenge 22 is about using the @Input decorator to retreive router params.
4+
author: thomas-laforge
5+
contributors:
6+
- alannelucq
7+
challengeNumber: 22
8+
command: angular-router-input
9+
blogLink: https://medium.com/ngconf/accessing-route-params-in-angular-1f8e12770617
10+
sidebar:
11+
order: 5
12+
---
13+
14+
## Information
15+
16+
Dans cette application, nous récupérons trois informations depuis le routeur dans notre `TestComponent` :
17+
18+
- `testId` qui est situé dans les paramètres de l'URL.
19+
- `user` qui est situé dans les paramètres de la requête de l'URL.
20+
- `permission` qui est défini dans l'objet `data` de la route.
21+
22+
Jusqu'à la version 15 d'Angular, nous devions utiliser le `ActivatedRoute` pour obtenir toutes ces informations et les récupérer via des observables pour écouter sur les changements d'URL.
23+
24+
Depuis la version 16, Angular a introduit un nouvel `Input` qui peut écouter les changements de données d'une route. Vous pouvez en savoir plus [ici](https://medium.com/ngconf/accessing-route-params-in-angular-1f8e12770617).
25+
26+
## Énoncé
27+
28+
L'objectif de cet exercice est de refactoriser le code pour utiliser la nouvelle stratégie `RouterInput`.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
---
2+
title: 🟢 Module vers Standalone
3+
description: Le challenge 31 consiste à migrer une application basée sur des modules vers une application standalone.
4+
author: thomas-laforge
5+
contributors:
6+
- alannelucq
7+
challengeNumber: 31
8+
command: angular-module-to-standalone
9+
sidebar:
10+
order: 6
11+
---
12+
13+
## Information
14+
15+
Dans la version 14 d'Angular, les composants standalone ont été introduits et sont devenus stables dans la version 15. Si vous ne les avez pas encore essayés, il n'est jamais trop tard. Vous pouvez les essayer dans ce challenge.
16+
17+
L'objectif est de voir comment **Nx** et les **composants standalone** fonctionnent ensemble, et d'expérimenter le processus de découplage de votre application avec la bibliothèque Nx et les composants standalone.
18+
19+
Les composants standalone sont très simples à comprendre mais les utilisations de ces composants dans **le routing et via du lazy-loading** peuvent être un peu plus difficiles à appréhender. Ce challenge vous permettra de manipuler des composants à différents niveaux d'imbrication et de travailler avec des routes qui utilisent du lazy loading.
20+
21+
Après avoir complété ce défi, les composants standalone n'auront plus aucun secret pour vous.
22+
23+
## Énoncé
24+
25+
L'objectif de ce challenge est de migrer votre application depuis des composants basés sur des modules vers des composants standalone.
26+
27+
## Note
28+
29+
Vous pouvez également tester le [schematic Angular](https://angular.dev/reference/migrations/standalone) pour migrer les NgModule vers des composants standalone. _(Comme nous utilisons Nx, commencez votre commande par nx au lieu de ng)_
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
---
2+
title: 🟢 Animations Simples
3+
description: Le challenge 46 consiste à apprendre comment utiliser l'API d'animations intégrée dans Angular
4+
author: sven-brodny
5+
contributors:
6+
- alannelucq
7+
challengeNumber: 46
8+
command: angular-simple-animations
9+
sidebar:
10+
order: 17
11+
---
12+
13+
## Information
14+
15+
Il s'agit du premier des deux challenges sur les animations. Le but de cette série est de maîtriser les animations en Angular.
16+
17+
Des animations bien conçues peuvent rendre votre application plus agréable et plus intuitive à utiliser, mais elles ne sont pas seulement cosmétiques. Les animations peuvent améliorer votre application et l'expérience utilisateur de plusieurs façons :
18+
19+
- Sans animations, les transitions de pages web peuvent sembler abruptes et désagréables.
20+
- Le mouvement améliore grandement l'expérience utilisateur, les animations permettent donc aux utilisateurs de percevoir la réponse de l'application à leurs actions.
21+
- De bonnes animations attirent intuitivement l'attention de l'utilisateur là où elle est nécessaire.
22+
23+
Je vous recommande de lire la [documentation officielle](https://angular.dev/guide/animations). Vous y apprendrez tout ce qui est nécessaire pour réussir ce challenge.
24+
25+
Vous pouvez également regarder cet [exemple fonctionnel](https://svenson95.github.io/ng-xmp-animations/) et ce [repertoire git](https://github.com/svenson95/ng-xmp-animations) pour vous inspirer.
26+
27+
## Énoncé
28+
29+
L'objectif de ce challenge est d'ajouter des animations qui doivent être déclenchées lorsque l'utilisateur arrive sur la page ou la recharge.
30+
31+
## Contraintes
32+
33+
- N'utilisez aucun CSS et utilisez l'API intégrée d'Angular `@angular/animations`.
34+
- Ne déclenchez pas les animations avec un bouton comme dans les exemples, mais lorsque l'utilisateur entre ou recharge la page.
35+
36+
### Niveau 1
37+
38+
Ajoutez une animation de fondu ou de déplacement pour les paragraphes sur le côté gauche.
39+
40+
<video controls src="https://github.com/tomalaforge/angular-challenges/assets/46655156/a43c3995-16ef-4d1f-bcfc-602b4ce80937">
41+
</video>
42+
43+
### Niveau 2
44+
45+
Ajoutez une animation en cascade pour la liste sur le côté droit.
46+
47+
<video controls src="https://github.com/tomalaforge/angular-challenges/assets/46655156/1a01af1b-44fc-4616-8793-681219f9d8bc">
48+
</video>
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
---
2+
title: 🟢 Application CRUD
3+
description: Le challenge 5 consiste à refactoriser une application CRUD
4+
author: thomas-laforge
5+
contributors:
6+
- alannelucq
7+
challengeNumber: 5
8+
command: angular-crud-application
9+
sidebar:
10+
order: 2
11+
---
12+
13+
## Information
14+
15+
Communiquer et synchroniser un état global ou local avec votre backend est au cœur de toute application. Vous devrez maîtriser les meilleures pratiques suivantes pour construire des applications Angular solides et fiables.
16+
17+
## Énoncé
18+
19+
Dans cet exercice, vous avez une petite application CRUD dans laquelle vous pouvez récupérer, mettre à jour et supprimer des tâches.
20+
21+
Pour le moment, nous avons un exemple fonctionnel mais qui est rempli de nombreuses mauvaises pratiques.
22+
23+
### Étape 1 : refactoriser avec les meilleures pratiques
24+
25+
Ce que vous devrez faire:
26+
27+
- Évitez d'utiliser **any** comme type. Utiliser des interfaces pour tirer parti du système de typage de Typescript permet d'éviter les erreurs.
28+
- Utilisez un **service séparé** pour tous vos appels HTTP et utilisez un **Signal** pour votre liste de tâches.
29+
- Ne **mutez** pas les données
30+
31+
```typescript
32+
// À éviter
33+
this.todos[todoUpdated.id - 1] = todoUpdated;
34+
35+
// Privilégier une approche comme celle-ci, mais qui doit être améliorée car nous voulons toujours conserver le même ordre
36+
this.todos = [...this.todos.filter((t) => t.id !== todoUpdated.id), todoUpdated];
37+
```
38+
39+
### Étape 2 : Améliorer
40+
41+
- Ajoutez un bouton **Supprimer** : _<a href="https://jsonplaceholder.typicode.com/" target="_blank">Documentation de l'API fictive</a>_
42+
- Gérez correctement les **erreurs**. _(De façon globale)_
43+
- Ajoutez un **indicateur de chargement** global. _Vous pouvez utilisez le MatProgressSpinnerModule_
44+
45+
### Étape 3 : Maintenabilité !! (ajoutez des tests)
46+
47+
- Ajoutez 2/3 tests
48+
49+
### Étape 4 : Effet waouw !!! (maîtrisez votre état).
50+
51+
- Utilisez le **component store de ngrx**, **ngrx/store**, **rxAngular**, **tanstack-query** ou **ngrx/signal-store** pour gérer l'état local de votre composant.
52+
- Ayez un indicateur de chargement/erreur **localisé** , par exemple uniquement sur la tâche en cours de traitement et **désactivez** tous les boutons sur cette tâche. _(Astuce: vous devrez créer un ItemComponent)_
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
---
2+
title: 🟢 Pipe pur
3+
description: Le challenge 8 consiste à créer un pipe pur
4+
author: thomas-laforge
5+
contributors:
6+
- alannelucq
7+
challengeNumber: 8
8+
command: angular-pure-pipe
9+
blogLink: https://medium.com/ngconf/deep-dive-into-angular-pipes-c040588cd15d
10+
sidebar:
11+
order: 3
12+
---
13+
14+
## Information
15+
16+
Il s'agit du premier des trois challenges `@Pipe()`. L'objectif de cette série est de maîtriser les **pipes** en Angular.
17+
18+
Les pipes sont un moyen très puissant de transformer les données dans votre template. La différence entre appeler une fonction et un pipe réside dans le fait que les pipes purs sont mémorisés. Ils ne seront donc pas recalculés à chaque cycle de détection des changements si les données en entrée n'ont pas changées.
19+
20+
Les pipes sont conçus pour être efficaces et optimisés pour la performance. Ils utilisent des mécanismes de détection des changements pour ne recalculer la valeur que si la donnée en entrée change, ce qui minimise les calculs inutiles et améliore les performances de rendu.
21+
22+
Par défaut, un pipe est pur. Vous devez être conscient que définir `pure` à false est susceptible d'être inefficace, car cela augmente le nombre de rerenders.
23+
24+
:::note
25+
Un pipe **pur** est appelé uniquement lorsque la valeur change.
26+
Un pipe **impur** est appelé à chaque cycle de détection des changements.
27+
:::
28+
29+
Il existe quelques pipes prédéfinis utiles comme DatePipe, UpperCasePipe et CurrencyPipe. Pour en savoir plus sur les pipes dans Angular, consultez la documentation de l'API [ici](https://angular.dev/guide/pipes).
30+
31+
## Énoncé
32+
33+
Dans cet exercice, vous devez refactoriser une fonction de transformation à l'intérieur d'un composant qui est appelée dans votre template. L'objectif est de convertir cette fonction en un pipe.
34+
35+
## Contraintes
36+
37+
- Doit être fortement typé

0 commit comments

Comments
 (0)