我有一个 Angular 2 的服务:
import {Storage} from './storage';
import {Injectable} from 'angular2/core';
import {Subject} from 'rxjs/Subject';
@Injectable()
export class SessionStorage extends Storage {
private _isLoggedInSource = new Subject<boolean>();
isLoggedIn = this._isLoggedInSource.asObservable();
constructor() {
super('session');
}
setIsLoggedIn(value: boolean) {
this.setItem('_isLoggedIn', value, () => {
this._isLoggedInSource.next(value);
});
}
}
一切运作良好。但我还有另一个组件不需要订阅,它只需要在某个时间点获取isLoggedIn的当前值。我该怎么做?
getValue()
是一个巨大的警示,表示你正在做一些错误的事情。它只是一个逃生口。通常情况下,你在使用 RxJS 时应该以声明式的方式进行操作。getValue()
是命令式的。如果你使用getValue()
,有99.9% 的可能性是你正在做一些错误或奇怪的事情。 - Ben LeshBehaviorSubject<boolean>(false)
并且想要切换它,该怎么办? - bobgetValue()
是否合理? - bobfoo$
是一个BehaviorSubject
(即它被定义为Observable
,可能是热或冷的来自延迟源)。但是,既然你接着在$foo
本身上使用了.next
,那么你的实现就依赖于它是一个BehaviorSubject
,所以没有理由不直接使用.value
来获取当前值。 - Simon_Weaver