如何使用 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);

https://stackblitz.com/edit/rxjs-xd4mpp

当您想要获得该行为时,您应该使用您拥有的可观察对象并分享它 + 重播最后一个值。好消息是,有一个运算符:shareReplay.

重要说明:定义 shareReplay 的参数,否则你将重放无限数量的值,如果没有人再听 observable 了..它仍然会保持打开状态!

所以请执行以下操作:

const replayedObs$ = originalObs$.pipe(
  shareReplay({ bufferSize: 1, refCount: true })
)

这样,您只会在订阅时获得最新的价值,如果没有人再收听 replayedObs$,它将被关闭。