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的例子也可以:)当然可以。完成并添加了一些信息