web-dev-qa-db-fra.com

Récupère la valeur actuelle de Subject.asObservable () dans Angular service

Je veux écrire une bascule simple dans un service Angular2.

J'ai donc besoin de la valeur actuelle d'un Subject que j'observe (voir ci-dessous).

import {Injectable} from 'angular2/core';
import {Subject} from 'rxjs/Subject';

@Injectable()

export class SettingsService {

  private _panelOpened = new Subject<boolean>();
  panelOpened$ = this._panelOpened.asObservable();

  togglePanel() {
    this._panelOpened.next(!this.panelOpened$);
  }

}

Comment obtenir la valeur actuelle de _panelOpened/panelOpened $?

Merci.

8
Sommereder

Semble que vous recherchez BehaviorSubject

private _panelOpened = new BehaviorSubject<boolean>(false);

Si vous vous abonnez, vous obtenez la dernière valeur comme premier événement.

togglePanel() {
  this.currentValue = !this.currentValue;
  this._panelOpened.next(this.currentValue);
}
9
Günter Zöchbauer

Pour élaborer sur @MattBurnell dans les commentaires de la réponse acceptée;

Si vous voulez juste la valeur actuelle maintenant (et vous ne voulez pas que beaucoup d'abonnements flottent), vous pouvez simplement utiliser la méthode getValue () du BehaviorSubject.

import {Component, OnInit} from 'angular2/core';
import {BehaviorSubject} from 'rxjs/subject/BehaviorSubject';

@Component({
  selector: 'bs-test',
  template: '<p>Behaviour subject test</p>'
})
export class BsTest implements OnInit {

  private _panelOpened = new BehaviorSubject<boolean>(false);
  private _subscription;

  ngOnInit() {
    console.log('initial value of _panelOpened', this._panelOpened.getValue());

    this._subscription = this._panelOpened.subscribe(next => {
      console.log('subscribing to it will work:', next);
    });

    // update the value:
    console.log('==== _panelOpened is now true ====');
    this._panelOpened.next(true);

    console.log('getValue will get the next value:', this._panelOpened.getValue());
  }
}

Cela se traduira par:

initial value of _panelOpened false
subscribing to it will work: false
==== _panelOpened is now true ====
subscribing to it will work: true
getValue will get the next value: true

Voir plunker :

3
rnacken