2016-03-15 24 views
5

Angular2サービス内に単純なトグルを書きたいと思います。角度サービス内のSubject.asObservable()の現在の値を取得

したがって、現在の値はSubjectです(下記参照)。

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$); 
    } 

} 

_panelOpened/panelOpened $から現在の値を取得するにはどうすればよいですか?

ありがとうございました。

答えて

7

は、あなたが最初のイベントとして最後の値を取得購読している場合、あなたがBehaviorSubject

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

を探しているようです。

togglePanel() { 
    this.currentValue = !this.currentValue; 
    this._panelOpened.next(this.currentValue); 
} 
+1

件名をか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()); } } 

これは、になります。私は購読する方法を知っていますが、購読なしで値を取得する方法はありませんか?**現在の値がほしいと思うたびに購読/購読を中止するビット。値が変わったときに通知を受ける - 私はそれを見る。 – Sommereder

+0

最後の値をローカルフィールドに代入するだけです。 –

+0

答えを更新しました。 –

2

受け入れられた回答のコメントで@MattBurnellを詳しく説明してください。

現在の値だけが必要な場合(多くのサブスクリプションを浮かべたくない場合)は、BehaviorSubjectのgetValue()というメソッドを使用できます。

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 

plunkerを参照してください:

関連する問題