如何使用 Observable 订阅行为主题
How to Subscribe a Behavior Subject with an Observable
我有一个场景,我想在用户点击商店选择器时获取 Observable 变量的当前值。根据 的已接受问题,我必须使用行为主题。但我从 Store 选择器中获得了 ab Observable 值。
现在,问题是如何将那个Observable值赋给Behavior Subject,以便在App中随时使用Behavior Subject的当前值。
您需要订阅才能获得价值,否则您只会获得 Observable
。
这是一个例子:
subject: BehaviorSubject<any> = new BehaviorSubject('initial value');
showVal()
{
this.subject.subscribe(x => this.val = x);
}
here 是 StackBlitz 演示。
您的问题的解决方案是:
const observable = of(true);
const behaviorSubject = new BehaviorSubject(false);
observable.subscribe(res => behaviorSubject.next(res));
console.log(behaviorSubject.value);
当您想要获得该行为时,您应该使用您拥有的可观察对象并分享它 + 重播最后一个值。好消息是,有一个运算符:shareReplay
.
重要说明:定义 shareReplay 的参数,否则你将重放无限数量的值,如果没有人再听 observable 了..它仍然会保持打开状态!
所以请执行以下操作:
const replayedObs$ = originalObs$.pipe(
shareReplay({ bufferSize: 1, refCount: true })
)
这样,您只会在订阅时获得最新的价值,如果没有人再收听 replayedObs$
,它将被关闭。
我有一个场景,我想在用户点击商店选择器时获取 Observable 变量的当前值。根据
现在,问题是如何将那个Observable值赋给Behavior Subject,以便在App中随时使用Behavior Subject的当前值。
您需要订阅才能获得价值,否则您只会获得 Observable
。
这是一个例子:
subject: BehaviorSubject<any> = new BehaviorSubject('initial value');
showVal()
{
this.subject.subscribe(x => this.val = x);
}
here 是 StackBlitz 演示。
您的问题的解决方案是:
const observable = of(true);
const behaviorSubject = new BehaviorSubject(false);
observable.subscribe(res => behaviorSubject.next(res));
console.log(behaviorSubject.value);
当您想要获得该行为时,您应该使用您拥有的可观察对象并分享它 + 重播最后一个值。好消息是,有一个运算符:shareReplay
.
重要说明:定义 shareReplay 的参数,否则你将重放无限数量的值,如果没有人再听 observable 了..它仍然会保持打开状态!
所以请执行以下操作:
const replayedObs$ = originalObs$.pipe(
shareReplay({ bufferSize: 1, refCount: true })
)
这样,您只会在订阅时获得最新的价值,如果没有人再收听 replayedObs$
,它将被关闭。