【发布时间】:2019-12-25 15:10:30
【问题描述】:
我的 Angular 应用程序中有一个网格,其中行中有按钮,单击按钮时,它会打开相应的弹出窗口。我创建了一个具有BehaviourSubject 属性的服务,即popupEventSubject$。
我面临的问题是,当我打开和关闭该行中的一个弹出窗口,然后打开另一个弹出窗口时,前一个弹出窗口会在当前弹出窗口旁边打开。我怀疑的问题是,由于RxJS 中的Subjects 发出先前的值(订阅时),所以在我的情况下,BehaviourSubject 正在维护先前事件的队列,并且当调用订阅时,它会显示所有队列中的事件,即打开以前的弹出窗口。
那么,有没有办法清除正在创建的“队列”?
理想情况下,我正在寻找我的BehaviourSubject 像AsyncSubject 一样工作,我尝试用AsyncSubject 替换BehaviourSubject,但它似乎没有发出初始事件。我使用AsyncSubject 在我的主题服务的构造函数中尝试了this.popupEventSubject$.emit(null),但它仍然无法订阅。
我想在弹出窗口关闭时取消订阅该主题,但由于主题不再可用,因此不会打开其他弹出窗口。
另外,我想避免在每次发出事件以清除queue 后发出null。
【问题讨论】:
-
为什么不直接使用普通的Subject?
-
你能提供一些你所做的代码吗?
-
请在一些在线编辑器中提供代码将是最好的。在我看来,主题对于那个例子来说已经足够了。但是,请提供代码,我们可以提供更多建议...
标签: angular rxjs behaviorsubject subject-observer