Chargement...

Référence des décorateurs

Dans Angular, les décorateurs sont des fonctionnalités essentielles qui permettent d’ajouter des métadonnées aux classes, propriétés et méthodes, indiquant au framework comment traiter ces entités dans l’application. La maîtrise des décorateurs est cruciale pour concevoir des architectures basées sur les composants, gérer efficacement l’état, contrôler le flux de données et gérer le cycle de vie des composants dans les applications web modernes et les SPA.
Les décorateurs principaux d’Angular incluent @Component, @Directive, @Pipe, @Injectable et @NgModule. Chacun a un rôle spécifique : @Component définit un composant d’interface utilisateur, @Directive crée des directives personnalisées, @Pipe gère la transformation des données, @Injectable facilite l’injection de dépendances et @NgModule organise des classes connexes en modules cohérents. Des décorateurs additionnels comme @Input et @Output gèrent la liaison de données entre composants parents et enfants, tandis que @ViewChild et @ContentChild offrent un accès aux composants enfants ou au contenu projeté.
Ce guide fournit des explications détaillées et des exemples pratiques sur l’utilisation des décorateurs pour gérer la logique des composants, la communication d’événements et les interactions du cycle de vie, tout en évitant les pièges courants tels que le prop drilling, les re-renders inutiles et les mutations d’état directes. Les lecteurs apprendront à structurer des composants performants, réutilisables et maintenables, tout en suivant les bonnes pratiques pour des projets Angular de niveau entreprise.

Exemple de Base

typescript
TYPESCRIPT Code
import { Component, Input } from '@angular/core';

@Component({
selector: 'app-user-card',
template: `     <div class="card">       <h2>{{ name }}</h2>       <p>Âge : {{ age }}</p>     </div>
`,
styles: [`     .card {
padding: 16px;
border-radius: 8px;
background-color: #f5f5f5;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
text-align: center;
}
`]
})
export class UserCardComponent {
@Input() name!: string;
@Input() age!: number;
}

Dans cet exemple de base, le décorateur @Component définit UserCardComponent comme un composant Angular réutilisable. Le sélecteur spécifie la balise HTML personnalisée, tandis que le template et les styles définissent la vue et le CSS du composant. Les décorateurs @Input permettent au composant de recevoir des données depuis son parent, assurant une gestion contrôlée de l’état et évitant le prop drilling.
Le cycle de vie du composant est géré automatiquement par Angular, garantissant l’initialisation, le rendu et la destruction appropriés. La liaison des propriétés d’entrée met à jour automatiquement la vue lorsque les données du parent changent, minimisant les re-renders inutiles. Cet exemple illustre comment les décorateurs structurent la conception des composants, la gestion de l’état et le flux de données dans des projets Angular, tout en garantissant la réutilisabilité et la performance.

Exemple Pratique

typescript
TYPESCRIPT Code
import { Component, Input, Output, EventEmitter } from '@angular/core';

@Component({
selector: 'app-counter',
template: `     <div class="counter">       <h3>Compteur : {{ count }}</h3>       <button (click)="increment()">+</button>       <button (click)="decrement()">-</button>     </div>
`,
styles: [`     .counter {
display: flex;
gap: 10px;
align-items: center;
justify-content: center;
}
`]
})
export class CounterComponent {
@Input() count: number = 0;
@Output() countChange = new EventEmitter<number>();

increment() {
this.count++;
this.countChange.emit(this.count);
}

decrement() {
this.count--;
this.countChange.emit(this.count);
}
}

Advanced Angular Implementation

typescript
TYPESCRIPT Code
import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';

@Component({
selector: 'app-smart-counter',
template: `     <div class="smart-counter">       <h3>Compteur intelligent : {{ value }}</h3>       <button (click)="increase()">+</button>       <button (click)="decrease()">-</button>     </div>
`,
styles: [`     .smart-counter {
background-color: #eef2f7;
padding: 16px;
border-radius: 12px;
text-align: center;
}
`]
})
export class SmartCounterComponent implements OnInit, OnChanges {
@Input() value: number = 0;
@Output() valueChange = new EventEmitter<number>();

ngOnInit() {
console.log('SmartCounter initialisé avec valeur :', this.value);
}

ngOnChanges(changes: SimpleChanges) {
if (changes['value']) {
console.log('Valeur modifiée :', changes['value'].currentValue);
}
}

increase() {
this.value++;
this.valueChange.emit(this.value);
}

decrease() {
this.value--;
this.valueChange.emit(this.value);
}
}

L’exemple avancé SmartCounterComponent combine les décorateurs @Input et @Output avec les hooks du cycle de vie OnInit et OnChanges pour gérer les données externes de manière réactive et contrôler l’état interne. Les valeurs initiales et les changements sont enregistrés pour faciliter le débogage, tandis que EventEmitter permet de notifier le parent des modifications.
Cet exemple démontre comment les décorateurs structurent des composants Angular performants et réutilisables tout en évitant les erreurs courantes comme le prop drilling et les re-renders inutiles. L’utilisation conjointe des hooks du cycle de vie, des décorateurs et des événements permet un contrôle précis du comportement et du flux de données, améliorant la maintenabilité et les performances.

Bonnes pratiques et pièges courants : Utilisez @Input uniquement pour les données nécessaires et @Output pour les événements clairement définis. Évitez les mutations directes d’état et le prop drilling excessif. L’utilisation de ChangeDetectionStrategy.OnPush optimise les performances et réduit les re-renders inutiles. Pour le débogage, Angular DevTools permet de suivre le cycle de vie et les émissions d’événements. En matière de sécurité, évitez l’injection de données non fiables et activez la vérification stricte des templates. L’usage approprié des décorateurs assure des applications Angular évolutives, maintenables et performantes.

📊 Référence Complète

Angular Element/Method Description Syntax Example Notes
@Component Définit un composant @Component({...}) @Component({ selector:'app-demo', template:'...' }) Décorateur le plus utilisé
@Directive Directive personnalisée @Directive({...}) @Directive({ selector:'[highlight]' }) Étend le comportement du DOM
@Pipe Transformation de données @Pipe({...}) @Pipe({name:'capitalize'}) Transforme les données dans le template
@NgModule Définit un module @NgModule({...}) @NgModule({ declarations:[], imports:[] }) Organise composants et directives
@Injectable Injection de service @Injectable({...}) @Injectable({ providedIn:'root' }) Injection de dépendances
@Input Propriété d’entrée @Input() prop:type @Input() title:string Flux de données parent-enfant
@Output Événement de sortie @Output() event=new EventEmitter() @Output() clicked=new EventEmitter() Communication enfant-parent
@HostListener Écoute des événements DOM @HostListener('click') handler(){} @HostListener('window:scroll') onScroll() Lie événements sur l’hôte
@ViewChild Accès au composant enfant @ViewChild(ChildComponent) child!:ChildComponent Manipuler instance enfant
@ContentChild Accès au contenu projeté @ContentChild(TemplateRef) tpl!:TemplateRef Manipuler template projeté
@HostBinding Liaison propriété hôte @HostBinding('class.active') isActive=true Lier dynamiquement attributs DOM

📊 Complete Angular Properties Reference

Property Values Default Description Angular Support
selector string none Sélecteur du composant Toutes versions
template string none Template du composant 2+
styles array string[] none Styles CSS
providers array [] Fournisseurs de dépendances 2+
inputs array [] Liste des propriétés @Input 4+
outputs array [] Liste des événements @Output 4+
animations array [] Animations du composant 4+
changeDetection string 'Default' Stratégie de détection des changements 5+
encapsulation string 'Emulated' Encapsulation CSS 2+
standalone boolean false Composant autonome 14+
imports array [] Modules importés 14+
schemas array [] Autoriser éléments personnalisés 9+

En résumé, maîtriser les décorateurs Angular permet de créer des composants maintenables, performants et réutilisables. Cela facilite la gestion de l’état, le contrôle du flux de données et la manipulation précise du cycle de vie. Les étapes suivantes consistent à explorer l’injection de dépendances, les hooks du cycle de vie, la stratégie de détection des changements et l’utilisation de RxJS pour le traitement asynchrone. L’application de ces techniques dans des projets réels, combin
ée à l’optimisation des performances et aux outils de débogage, permet d’atteindre un niveau avancé de développement Angular prêt pour la production.

🧠 Testez Vos Connaissances

Prêt à Commencer

Testez Vos Connaissances

Mettez-vous au défi avec ce quiz interactif et voyez à quel point vous comprenez le sujet

3
Questions
🎯
70%
Pour Réussir
♾️
Temps
🔄
Tentatives

📝 Instructions

  • Lisez chaque question attentivement
  • Sélectionnez la meilleure réponse pour chaque question
  • Vous pouvez refaire le quiz autant de fois que vous le souhaitez
  • Votre progression sera affichée en haut