Obtention de la valeur actuelle du sujet ou de l'observable RxJS
Dans les applications angulaires, il est courant d'utiliser des sujets ou des observables pour le partage de données et la communication. Cependant, contrairement aux variables, les sujets et les observables n’ont pas intrinsèquement de valeur actuelle. Lorsqu'ils émettent une valeur, celle-ci est immédiatement transmise aux abonnés et l'observable termine sa tâche.
Scénario :
Supposons que vous ayez un sujet isLoggedIn dans un service Angular qui représente le statut de connexion de l'utilisateur. Vous souhaitez qu'un autre composant récupère l'état de connexion actuel sans vous abonner à l'observable isLoggedIn.
Solution :
Pour résoudre ce problème, RxJS propose un BehaviorSubject, spécialement conçu pour fournir une valeur actuelle. Contrairement aux sujets et aux observables, un BehaviorSubject se souvient de la dernière valeur émise et l'émet immédiatement aux observateurs nouvellement abonnés.
Mise en œuvre :
Pour utiliser un BehaviorSubject, vous pouvez modifier votre Service SessionStorage comme suit :
@Injectable() export class SessionStorage extends Storage { private _isLoggedInSource = new BehaviorSubject<boolean>(false); // Initialize with a default value isLoggedIn = this._isLoggedInSource.asObservable(); constructor() { super('session'); } setIsLoggedIn(value: boolean) { this.setItem('_isLoggedIn', value, () => { this._isLoggedInSource.next(value); }); } }
Dans votre composant, vous pouvez récupérer l'état de connexion actuel à l'aide de la méthode getValue() du BehaviorSubject :
import {SessionStorage} from 'app/services/session-storage.service'; ... const sessionStorage = new SessionStorage(); const isLoggedIn = sessionStorage.isLoggedInSource.getValue();
En utilisant BehaviorSubject, vous avez un mécanisme pour obtenir la valeur actuelle de votre sujet isLoggedIn sans dépendre des abonnements, offrant une plus grande flexibilité dans la conception de votre application et la gestion des données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!