Rxjs 在行为主体中更新自我时如何避免无限循环?

Rxjs 在行为主体中更新自我时如何避免无限循环?,rxjs,observable,Rxjs,Observable,声明如下: public panel$: BehaviorSubject<any> = new BehaviorSubject<any>(false); 它创建了一个试图更新自我的无休止的循环。您只需从面板$可观察到的一个(最新)值即可更新它: this.panel$.take(1).subscribe(...) 但最好以稍微不同的方式对您的状态进行建模,如下所示: public panel$: BehaviorSubject<any> = new

声明如下:

  public panel$: BehaviorSubject<any> = new BehaviorSubject<any>(false);

它创建了一个试图更新自我的无休止的循环。

您只需从
面板$
可观察到的一个(最新)值即可更新它:

this.panel$.take(1).subscribe(...)
但最好以稍微不同的方式对您的状态进行建模,如下所示:

  public panel$: BehaviorSubject<any> = new BehaviorSubject<any>(false);
//const onToggle$=new Rx.Subject();
var toggle$=Rx.Observable.fromEvent(文档“单击”);
const initialValue=true;
const state$=切换$
.scan(状态=>!状态,初始值)
.startWith(初始值);
常量htmlSubscription=state$.subscribe(state=>{
document.getElementById('toggle')。innerText='toggle:'+状态;
});


正在加载…
为什么需要在其自己的订阅回调中更新
面板$
?好的,那么我不知道通常的切换方式,告诉我将在哪里放置上述代码。我需要一个ontogle()函数来调用(我已经更新了代码段)。你可以将value
onToggle$。下一步(…)
从你的
onToggle
功能上我使用的是angular,很抱歉我没提到。是的,我看到了,但没关系。只需将可观察到的点击事件替换为角度信息,它就会起作用。我不清楚,我应该在
toggle()
中订阅什么?