Retour au cours

Partage de données entre composants via des services

Le Développeur Angular Complet : de Zéro à Héros

24. Partage de données entre composants via des services

Nous avons découvert @Input et @Output pour la communication parent-enfant. Mais qu'en est-il de la communication entre des composants qui n'ont pas de lien direct (frères, cousins ou composants éloignés) ? Les services offrent le mécanisme parfait pour cela, en tirant parti de la nature singleton des services fournis à la racine.

Le service de données partagées

Nous allons créer un service qui contient des données et fournit des méthodes pour que les composants puissent mettre à jour ou récupérer ces données.

typescript // shared-state.service.ts import { Injectable } from '@angular/core';

@Injectable({ providedIn: 'root' }) export class SharedStateService { private messageSource = 'Message initial';

getMessage(): string { return this.messageSource; }

updateMessage(newMessage: string): void { this.messageSource = newMessage; } }

1. Composant A (L'expéditeur)

typescript // sender.component.ts constructor(private stateService: SharedStateService) { }

sendUpdate(input: string) { this.stateService.updateMessage(input); }

2. Composant B (Le destinataire)

typescript // receiver.component.ts public currentMessage: string;

constructor(private stateService: SharedStateService) { this.currentMessage = this.stateService.getMessage(); }

// Nous avons besoin d'un moyen de détecter les changements... // Dans les prochaines leçons, nous utiliserons RxJS (Observables) pour rendre cela dynamique et réactif. // Pour l'instant, ce composant devra être rafraîchi ou vérifié manuellement.

Limitation : La méthode ci-dessus n'est pas réactive ; le composant B doit appeler activement getMessage() pour récupérer la donnée. Les leçons suivantes sur RxJS résoudront ce problème en permettant aux services de notifier les composants des changements de manière asynchrone.