Maison  >  Article  >  interface Web  >  Comment récupérer la valeur actuelle d'un sujet RxJS ou observable en Angular ?

Comment récupérer la valeur actuelle d'un sujet RxJS ou observable en Angular ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-04 00:14:30764parcourir

How to Retrieve the Current Value of an RxJS Subject or Observable in Angular?

Obtention de la valeur actuelle d'un sujet ou d'un observable RxJS

Dans les applications angulaires, les observables sont couramment utilisés pour diffuser des données entre des composants et des services. Une question courante qui se pose est de savoir comment récupérer la valeur actuelle d'un observable sans s'y abonner.

Dans le code fourni, le service SessionStorage utilise un sujet nommé _isLoggedInSource pour émettre l'état de connexion actuel. Bien que la propriété isLoggedIn expose cet observable, elle n'a pas de concept de valeur actuelle.

Solution : utiliser BehaviorSubject

La solution à ce problème réside dans l'utilisation d'un BehaviorSubject au lieu d'un sujet. Un BehaviorSubject garde une trace de la valeur émise la plus récente et l'émet immédiatement aux nouveaux abonnés.

<code class="typescript">import {BehaviorSubject} from 'rxjs/BehaviorSubject';

@Injectable()
export class SessionStorage extends Storage {
  private _isLoggedInSource = new BehaviorSubject<boolean>(false);
  isLoggedIn = this._isLoggedInSource.asObservable();
  constructor() {
    super('session');
  }
  setIsLoggedIn(value: boolean) {
    this.setItem('_isLoggedIn', value, () => {
      this._isLoggedInSource.next(value);
    });
  }
}</code>

Maintenant, vous pouvez récupérer l'état de connexion actuel à l'aide de la méthode getValue() de BehaviorSubject :

<code class="typescript">isLoggedIn = sessionService._isLoggedInSource.getValue();</code>

Conclusion

En utilisant BehaviorSubject, vous pouvez accéder à la valeur actuelle d'un observable même sans vous y abonner. Ceci est particulièrement utile lorsque vous devez lire la dernière valeur émise à des points spécifiques de votre code.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn