web-dev-qa-db-fra.com

Obtenir la valeur actuelle de Observable sans souscrire (vous ne voulez que la valeur une fois)

Le titre dit tout, vraiment. Comment puis-je obtenir la valeur actuelle d'un observable sans y souscrire? Je veux juste la valeur actuelle une fois et non de nouvelles valeurs car elles arrivent ...

18
EricC

Vous devez utiliser BehaviorSubject ,

  • BehaviorSubject est similaire à ReplaySubject, à la différence qu’il ne se souvient que de la dernière publication. 
  • BehaviorSubject nécessite également que vous lui fournissiez une valeur par défaut de T. Cela signifie que tous les abonnés recevront une valeur immédiatement (sauf si c'est déjà terminé).

Cela vous donnera la valeur la plus récente publiée par l'Observable.

BehaviorSubject fournit une propriété getter nommée value pour obtenir la valeur la plus récente transmise.


PLUNKER DEMO

  • Dans cet exemple, la valeur 'a' est écrite sur la console:

  //Declare a Subject, you'll need to provide a default value.
  var subject: BehaviorSubject<string> = new BehaviorSubject("a");

USAGE: 

console.log(subject.value); // will print the current value
23
Ankit Singh

Je ne sais pas si c'est ce que vous recherchez. Probablement écrire ce comportement dans un service. Déclarez-le comme privé et n'exposez que la valeur que vous avez définie. Quelque chose comme ça

 @Injectable({
   providedIn: 'root'
 })
  export class ConfigService {
    constructor(private bname:BehaviorSubject<String>){
       this.bname = new BehaviorSubject<String>("currentvalue");
    }

    getAsObservable(){
       this.bname.asObservable();
    }
 }

De cette manière, les utilisateurs externes ont uniquement accès à l'abonnement à behaviorSubject et vous pouvez définir la valeur souhaitée dans le service.

0
Joey587