Maintenu par une équipe dédiée chez Google, Angular fournit un large ensemble d'outils, d'API et de
libraries pour simplifier et fluidifier votre flux de développement. Angular vous donne
une plateforme solide sur laquelle créer des applications rapides et fiables, qui grandissent avec la taille de
votre équipe comme avec celle de votre base de code. Angular.dev est le site officiel de la documentation d'Angular.
Un aperçu de ce qu'est le développement avec Angular
Des instructions pas à pas dans votre navigateur
Démarrez rapidement avec Angular grâce aux projets en ligne, ou en local avec votre terminal.
## Essayer en ligne {#play-online}
Si vous voulez simplement essayer Angular dans votre navigateur sans configurer de projet, vous pouvez utiliser notre bac à sable en ligne :
## Créer un nouveau projet en local {#set-up-a-new-project-locally}
Si vous démarrez un nouveau projet, vous voudrez très probablement créer un projet local afin de pouvoir utiliser des outils comme Git.
### Prérequis {#prerequisites}
- **Node.js** - [v22.22.3 ou plus récent](/reference/versions)
- **Éditeur de texte** - Nous recommandons [Visual Studio Code](https://code.visualstudio.com/)
- **Terminal** - Nécessaire pour exécuter les commandes de l'[Angular CLI](/tools/cli)
- **Outil de développement** - Pour améliorer votre flux de développement, nous recommandons l'[Angular Language Service](/tools/language-service)
### Instructions {#instructions}
Le guide suivant vous accompagne dans la création d'un projet Angular en local.
#### Installer l'Angular CLI {#install-angular-cli}
Ouvrez un terminal (si vous utilisez [Visual Studio Code](https://code.visualstudio.com/), vous pouvez ouvrir un [terminal intégré](https://code.visualstudio.com/docs/editor/integrated-terminal)) et exécutez la commande suivante :
```shell
// npm
npm install -g @angular/cli
```
```shell
// pnpm
pnpm install -g @angular/cli
```
```shell
// yarn
yarn global add @angular/cli
```
```shell
// bun
bun install -g @angular/cli
```
Si vous rencontrez des problèmes pour exécuter cette commande sous Windows ou Unix, consultez la [documentation de la CLI](/tools/cli/setup-local#install-the-angular-cli) pour plus d'informations.
#### Créer un nouveau projet {#create-a-new-project}
Dans votre terminal, exécutez la commande CLI [`ng new`](cli/new) avec le nom de projet souhaité. Dans les exemples suivants, nous utiliserons le nom de projet `my-first-angular-app`.
```shell
ng new
```
Plusieurs options de configuration vous seront proposées pour votre projet. Utilisez les flèches et la touche Entrée pour naviguer et sélectionner les options souhaitées.
Si vous n'avez pas de préférence, appuyez simplement sur Entrée pour accepter les options par défaut et poursuivre la configuration.
Une fois les options de configuration choisies et la configuration terminée par la CLI, vous devriez voir le message suivant :
```text
✔ Packages installed successfully.
Successfully initialized git.
```
Vous êtes maintenant prêt à exécuter votre projet en local !
#### Exécuter votre nouveau projet en local {#running-your-new-project-locally}
Dans votre terminal, placez-vous dans votre nouveau projet Angular.
```shell
cd my-first-angular-app
```
Toutes vos dépendances devraient être installées à ce stade (vous pouvez le vérifier en contrôlant la présence d'un dossier `node_modules` dans votre projet). Vous pouvez donc démarrer votre projet avec la commande :
```shell
npm start
```
Si tout se passe bien, vous devriez voir un message de confirmation similaire dans votre terminal :
```text
Watch mode enabled. Watching for file changes...
NOTE: Raw file sizes do not reflect development server per-request transformations.
➜ Local: http://localhost:4200/
➜ press h + enter to show help
```
Vous pouvez maintenant ouvrir l'adresse indiquée dans `Local` (par exemple `http://localhost:4200`) pour voir votre application. Bon code ! 🎉
### Utiliser l'IA pour le développement {#using-ai-for-development}
Pour commencer à développer dans votre IDE assisté par IA préféré, [consultez les règles de prompt et les bonnes pratiques Angular](/ai/develop-with-ai).
## Prochaines étapes {#next-steps}
Maintenant que vous avez créé votre projet Angular, vous pouvez en apprendre davantage sur Angular avec notre [guide des Fondamentaux](/essentials) ou choisir un sujet dans nos guides approfondis !
# Guide de style Angular
## Introduction {#introduction}
Ce guide couvre un ensemble de conventions de style pour le code des applications Angular. Ces recommandations
ne sont pas nécessaires au fonctionnement d'Angular, mais établissent plutôt un ensemble de pratiques de code qui favorisent
la cohérence dans l'écosystème Angular. Un ensemble cohérent de pratiques facilite le partage
de code et le passage d'un projet à l'autre.
Ce guide ne couvre _pas_ TypeScript ni les pratiques de code générales sans lien avec Angular. Pour
TypeScript, consultez
le [guide de style TypeScript de Google](https://google.github.io/styleguide/tsguide.html).
### En cas de doute, privilégiez la cohérence {#when-in-doubt-prefer-consistency}
Chaque fois que vous rencontrez une situation où ces règles contredisent le style d'un fichier particulier,
donnez la priorité à la cohérence au sein du fichier. Mélanger différentes conventions de style dans un même
fichier crée plus de confusion que de s'écarter des recommandations de ce guide.
## Nommage {#naming}
### Séparez les mots des noms de fichiers par des tirets {#separate-words-in-file-names-with-hyphens}
Séparez les mots d'un nom de fichier par des tirets (`-`). Par exemple, un composant nommé `UserProfile`
a pour nom de fichier `user-profile.ts`.
### Utilisez le même nom pour les tests d'un fichier, avec `.spec` à la fin {#use-the-same-name-for-a-files-tests-with-spec-at-the-end}
Pour les tests unitaires, terminez les noms de fichiers par `.spec.ts`. Par exemple, le fichier de test unitaire
du composant `UserProfile` a pour nom de fichier `user-profile.spec.ts`.
### Faites correspondre les noms de fichiers à l'identifiant TypeScript qu'ils contiennent {#match-file-names-to-the-typescript-identifier-within}
Les noms de fichiers doivent généralement décrire le contenu du code du fichier. Quand le fichier contient une
classe TypeScript, le nom du fichier doit refléter le nom de cette classe. Par exemple, un fichier contenant un
composant nommé `UserProfile` a pour nom `user-profile.ts`.
Si le fichier contient plus d'un identifiant principal nommable, choisissez un nom qui décrit le
thème commun du code qu'il contient. Si le code d'un fichier ne relève pas d'un thème ou d'un domaine fonctionnel
commun, envisagez de le répartir dans différents fichiers. Évitez les noms de fichiers trop génériques
comme `helpers.ts`, `utils.ts` ou `common.ts`.
### Utilisez le même nom de fichier pour le TypeScript, le template et les styles d'un composant {#use-the-same-file-name-for-a-components-typescript-template-and-styles}
Les composants se composent généralement d'un fichier TypeScript, d'un fichier de template et d'un fichier de style. Ces
fichiers doivent partager le même nom avec des extensions différentes. Par exemple, un composant `UserProfile`
peut avoir les fichiers `user-profile.ts`, `user-profile.html` et `user-profile.css`.
Si un composant a plus d'un fichier de style, ajoutez au nom des mots supplémentaires qui décrivent les
styles propres à ce fichier. Par exemple, `UserProfile` pourrait avoir les fichiers de style
`user-profile-settings.css` et `user-profile-subscription.css`.
## Structure du projet {#project-structure}
### Tout le code de l'application se trouve dans un répertoire nommé `src` {#all-the-applications-code-goes-in-a-directory-named-src}
Tout votre code d'interface Angular (TypeScript, HTML et styles) doit se trouver dans un répertoire
nommé `src`. Le code sans lien avec l'interface, comme les fichiers de configuration ou les scripts, doit se trouver
en dehors du répertoire `src`.
Cela garde le répertoire racine de l'application cohérent d'un projet Angular à l'autre et crée
une séparation claire entre le code d'interface et le reste du code de votre projet.
### Lancez le bootstrap de votre application dans un fichier nommé `main.ts`, directement dans `src` {#bootstrap-your-application-in-a-file-named-maints-directly-inside-src}
Le code qui démarre une application Angular, autrement dit son **bootstrap**, doit toujours se trouver dans un fichier
nommé `main.ts`. Il représente le point d'entrée principal de l'application.
### Regroupez les fichiers étroitement liés dans le même répertoire {#group-closely-related-files-together-in-the-same-directory}
Les composants Angular se composent d'un fichier TypeScript et, éventuellement, d'un template et d'un ou plusieurs fichiers
de style. Regroupez-les dans le même répertoire.
Les tests unitaires doivent se trouver dans le même répertoire que le code testé. Évitez de rassembler des
tests sans rapport entre eux dans un unique répertoire `tests`.
### Organisez votre projet par domaine fonctionnel {#organize-your-project-by-feature-areas}
Organisez votre projet en sous-répertoires selon les fonctionnalités de votre application ou les thèmes communs
du code de ces répertoires. Par exemple, la structure du projet d'un site de cinéma,
MovieReel, pourrait ressembler à ceci :
```
src/
├─ movie-reel/
│ ├─ show-times/
│ │ ├─ film-calendar/
│ │ ├─ film-details/
│ ├─ reserve-tickets/
│ │ ├─ payment-info/
│ │ ├─ purchase-confirmation/
```
Évitez de créer des sous-répertoires selon le type de code qu'ils contiennent. Par
exemple, évitez de créer des répertoires comme `components`, `directives` et `services`.
Évitez de placer tant de fichiers dans un même répertoire qu'il devient difficile à lire ou à parcourir. À mesure que le
nombre de fichiers d'un répertoire augmente, envisagez de le découper davantage en sous-répertoires supplémentaires.
### Un concept par fichier {#one-concept-per-file}
Privilégiez des fichiers source centrés sur un seul _concept_. Pour les classes Angular en particulier, cela signifie généralement
un composant, une directive ou un service par fichier. Il est toutefois acceptable qu'un fichier contienne plus
d'un composant ou d'une directive si vos classes sont relativement petites et qu'elles forment ensemble un
seul et même concept.
En cas de doute, choisissez l'approche qui conduit à des fichiers plus petits.
## Injection de dépendances {#dependency-injection}
### Préférez la fonction `inject` à l'injection par paramètres du constructeur {#prefer-the-inject-function-over-constructor-parameter-injection}
Préférez la fonction [`inject`](/api/core/inject) à l'injection par paramètres du constructeur. La fonction [`inject`](/api/core/inject) fonctionne de la même façon que l'injection par paramètres du constructeur, mais offre plusieurs avantages de style :
- [`inject`](/api/core/inject) est généralement plus lisible, surtout quand une classe injecte de nombreuses dépendances.
- Il est syntaxiquement plus simple d'ajouter des commentaires aux dépendances injectées
- [`inject`](/api/core/inject) offre une meilleure inférence de types.
- Quand vous ciblez ES2022+ avec [`useDefineForClassFields`](https://www.typescriptlang.org/tsconfig/#useDefineForClassFields), vous évitez de séparer la déclaration et l'initialisation des champs lorsque ceux-ci lisent des dépendances injectées.
[Vous pouvez refactoriser le code existant vers `inject` avec un outil automatique](reference/migrations/inject-function).
## Composants et directives {#components-and-directives}
### Choisir les selectors des composants {#choosing-component-selectors}
Consultez
le [guide des composants pour savoir comment choisir les selectors des composants](guide/components/selectors#choosing-a-selector).
### Nommer les membres des composants et des directives {#naming-component-and-directive-members}
Consultez le guide des composants pour en savoir plus
sur le [nommage des propriétés d'input](guide/components/inputs#choosing-input-names)
et le [nommage des propriétés d'output](guide/components/outputs#choosing-event-names).
### Choisir les selectors des directives {#choosing-directive-selectors}
Les directives doivent utiliser le
même [préfixe propre à l'application](guide/components/selectors#selector-prefixes)
que vos composants.
Quand vous utilisez un attribute selector pour une directive, utilisez un nom d'attribut en camelCase. Par exemple, si
votre application s'appelle « MovieReel » et que vous créez une directive qui ajoute une infobulle à un élément,
vous pourriez utiliser le selector `[mrTooltip]`.
### Regroupez les propriétés propres à Angular avant les méthodes {#group-angular-specific-properties-before-methods}
Les composants et les directives doivent regrouper les propriétés propres à Angular, généralement vers le haut
de la déclaration de la classe. Cela inclut les dépendances injectées, les inputs, les outputs et les queries. Définissez
ces propriétés, ainsi que les autres, avant les méthodes de la classe.
Cette pratique permet de trouver plus facilement les API de template et les dépendances de la classe.
### Concentrez les composants et les directives sur la présentation {#keep-components-and-directives-focused-on-presentation}
Le code de vos composants et de vos directives doit généralement concerner l'interface affichée sur la page. Pour
le code qui a du sens par lui-même, découplé de l'interface, préférez le déplacer dans d'autres fichiers. Par
exemple, vous pouvez extraire les règles de validation de formulaire ou les transformations de données dans des fonctions ou
des classes séparées.
### Évitez une logique trop complexe dans les templates {#avoid-overly-complex-logic-in-templates}
Les templates Angular sont conçus pour
accueillir des [expressions proches de JavaScript](guide/templates/expression-syntax).
Tirez parti de ces expressions pour exprimer une logique relativement simple directement
dans les expressions de template.
Cependant, quand le code d'un template devient trop complexe, déplacez la logique dans le code TypeScript (généralement avec un [computed](guide/signals#computed-signals)).
Il n'existe pas de règle stricte et définitive qui détermine ce qui est « complexe ». Faites preuve de
discernement.
### Utilisez `protected` pour les membres de classe utilisés uniquement par le template d'un composant {#use-protected-on-class-members-that-are-only-used-by-a-components-template}
Les membres publics d'une classe de composant définissent intrinsèquement une API publique accessible via
l'injection de dépendances et les [queries](guide/components/queries). Préférez l'accès `protected`
pour tous les membres destinés à être lus depuis le template du composant.
```ts
@Component({
...,
template: `
{{ fullName() }}
`,
})
export class UserProfile {
firstName = input();
lastName = input();
// `fullName` is not part of the component's public API, but is used in the template.
protected fullName = computed(() => `${this.firstName()} ${this.lastName()}`);
}
```
### Utilisez `readonly` pour les propriétés qui ne doivent pas changer {#use-readonly-for-properties-that-shouldnt-change}
Marquez comme `readonly` les propriétés des composants et des directives initialisées par Angular. Cela inclut
les propriétés initialisées par `input`, `model`, `output` et les queries. Le modificateur d'accès readonly
garantit que la valeur définie par Angular n'est pas écrasée.
```ts
@Component(/* ... */)
export class UserProfile {
readonly userId = input();
readonly userSaved = output();
readonly userName = model();
}
```
Pour les composants et les directives qui utilisent les API `@Input`, `@Output` et de query à base de décorateurs, ce
conseil s'applique aux propriétés d'output et aux queries, mais pas aux propriétés d'input.
```ts
@Component(/* ... */)
export class UserProfile {
@Output() readonly userSaved = new EventEmitter();
@ViewChildren(PaymentMethod) readonly paymentMethods?: QueryList;
}
```
### Préférez `class` et `style` à `ngClass` et `ngStyle` {#prefer-class-and-style-over-ngclass-and-ngstyle}
Préférez les bindings `class` et `style` aux directives [`NgClass`](/api/common/NgClass) et [`NgStyle`](/api/common/NgStyle).
```html
{prefer}
```
```html
{avoid}
```
Les bindings `class` et `style` utilisent tous deux une syntaxe plus simple, très proche des
attributs HTML standard. Vos templates sont ainsi plus faciles à lire et à comprendre, en particulier pour
les développeurs qui connaissent les bases du HTML.
De plus, les directives `NgClass` et `NgStyle` entraînent un coût de performance supplémentaire par rapport
à la syntaxe de binding `class` et `style` intégrée.
Pour plus de détails, consultez le [guide des bindings](/guide/templates/binding#css-class-and-style-property-bindings)
### Nommez les event handlers d'après ce qu'ils _font_, pas d'après l'événement déclencheur {#name-event-handlers-for-what-they-do-not-for-the-triggering-event}
Préférez nommer les event handlers d'après l'action qu'ils effectuent plutôt que d'après l'événement déclencheur :
```html
{prefer}
```
```html
{avoid}
```
Des noms parlants comme celui-ci permettent de comprendre plus facilement ce que fait un événement en lisant le
template.
Pour les événements clavier, vous pouvez utiliser les modificateurs d'événements clavier d'Angular avec des noms de handlers précis :
```html