【问题标题】:How to Subscribe a Behavior Subject with an Observable如何使用 Observable 订阅行为主题
【发布时间】:2020-01-22 11:16:27
【问题描述】:

我有一个场景,我想在用户单击时获取 Observable 变量的当前值,这是一个商店选择器。根据This Question 接受的问题,我必须使用行为主题。但是我从 Store 选择器中得到了一个 Observable 值。

现在,问题是如何将 Observable 值分配给 Behavior Subject 以在 App 中随时使用 Behavior Subject 的当前值。

【问题讨论】:

  • 你能创建stackblitz demo吗?
  • 你只需要使用shareReplay操作符
  • @maxime1992 非常感谢您的意见!您能否添加一个简单的示例作为答案。没有 stackblitz 的示例也可以:)
  • 确定。完成并添加了一些信息

标签: angular rxjs ngrx angular2-observables


【解决方案1】:

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

重要提示:定义 shareReplay 的参数,否则您将重播无限数量的值,如果没有人再听 observable.. 它仍将保持打开状态!

请执行以下操作:

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

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

【讨论】:

    【解决方案2】:

    您需要订阅才能获得价值,否则您只会获得Observable。

    这是一个例子:

    subject: BehaviorSubject<any> = new BehaviorSubject('initial value'); 
    
      showVal()
      {
        this.subject.subscribe(x => this.val = x);
      }
    

    here 是 StackBlitz 演示。

    【讨论】:

      【解决方案3】:

      您的问题的解决方案是这样的:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 2021-03-28
        • 1970-01-01
        • 2015-08-11
        • 2020-09-28
        • 2020-03-27
        相关资源
        最近更新 更多