Angular2サービス内に簡単なトグルを書きたいのですが。
したがって、私は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 $から現在の値を取得するにはどうすればよいですか?
ありがとう。
お探しのようです BehaviorSubject
private _panelOpened = new BehaviorSubject<boolean>(false);
サブスクライブすると、最後の値が最初のイベントとして取得されます。
togglePanel() {
this.currentValue = !this.currentValue;
this._panelOpened.next(this.currentValue);
}
承認された回答のコメントで@MattBurnellについて詳しく説明します。
現在の値だけが必要な場合(そして多くのサブスクリプションをフロートさせたくない場合)、BehaviorSubjectのメソッドgetValue()を使用できます。
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());
}
}
これは次の結果になります:
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 を参照してください: