Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何订阅具有可观察属性的行为主题_Angular_Rxjs_Ngrx_Angular2 Observables - Fatal编程技术网

Angular 如何订阅具有可观察属性的行为主题

Angular 如何订阅具有可观察属性的行为主题,angular,rxjs,ngrx,angular2-observables,Angular,Rxjs,Ngrx,Angular2 Observables,我有一个场景,在这个场景中,我想在用户点击一个商店选择器时获得一个可观察变量的当前值。根据公认的问题,我必须使用行为主体。但是我从商店选择器中得到一个可观察的值 现在的问题是如何将该可观察值分配给行为主体,以便在应用程序中随时使用行为主体的当前值。您需要订阅才能获得该值,否则您只需获得一个可观察的 下面是一个例子: subject: BehaviorSubject<any> = new BehaviorSubject('initial value'); showVal()

我有一个场景,在这个场景中,我想在用户点击一个商店选择器时获得一个可观察变量的当前值。根据公认的问题,我必须使用行为主体。但是我从商店选择器中得到一个可观察的值


现在的问题是如何将该可观察值分配给行为主体,以便在应用程序中随时使用行为主体的当前值。

您需要订阅才能获得该值,否则您只需获得一个可观察的

下面是一个例子:

subject: BehaviorSubject<any> = new BehaviorSubject('initial value'); 

  showVal()
  {
    this.subject.subscribe(x => this.val = x);
  }

subject:BehaviorSubject是一个StackBlitz演示。

您的问题的解决方案如下:

const observable = of(true);
const behaviorSubject = new BehaviorSubject(false);

observable.subscribe(res => behaviorSubject.next(res));

console.log(behaviorSubject.value);


当你想要获得这种行为时,你应该使用你所拥有的可观察到的,并分享它+重放最后一个值。好的是,这里有一个操作符:
shareReplay

重要提示:请定义shareReplay的参数,否则将重播无限多的值,如果没有人再收听可观察的内容。。它仍然是开着的

以下各点也是如此:

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

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

您可以创建stackblitz演示吗。您只需要使用shareReplayoperator@maxime1992非常感谢您的投入!你能补充一个简单的例子作为答案吗。没有stackblitz的例子也可以:)当然可以。完成并添加了一些信息