【发布时间】:2019-11-26 13:52:43
【问题描述】:
我有一个 Angular 应用程序,我在其中使用 RxJS BehaviorSubject 订阅一个表示“进行中”状态的 bool 值。
但我只关心状态何时发生变化,而不是订阅的当前状态。
export class ProgressService {
private InProgress$ = new BehaviorSubject<boolean>(false);
constructor() {}
public getInProgressStateSubject() {
return this.InProgress$;
}
}
...
this.progressService.getInProgressSubject().subscribe((inProgress: boolean) => {
// This will be triggered in the moment of subscription as well as on state chages
if (inProgress) {
// Toggle on state
} else {
// Toggle off state
}
});
我喜欢它的工作方式,我只是不希望它在订阅时触发。
RxJS 中是否有其他类似的运算符可以帮助我,或者我可以用其他方式来做吗?
谢谢!
【问题讨论】:
-
简单地使用普通的旧主题?这仍然为您提供 next()。
-
哦,麻烦...谢谢!我相信这就是我正在寻找的。出于某种原因,我认为 Subject 没有 next() 方法来触发更改,甚至没有尝试 =P
-
主体和行为主体之间的最大区别在于行为主体存储最后发出的值,而新订阅者在订阅时获得最后发出的值。有了一个主题,新订阅者在下一次发出之前不会得到一个值。
-
感谢@AdrianBrand 的解释!