angular - 可观察订阅只接收第一个事件
问题描述
我有一些 Angular 组件,我使用 BehaviorSubject 在它们之间传递事件。
服务:
@Injectable()
export class SiteManagementEventService {
private messageSource = new BehaviorSubject<SiteManagementEvent>(defaultEvent);
data = this.messageSource.asObservable();
constructor() {}
// publish the event using the service
public publish(event: SiteManagementEvent) {
if (event !== null) {
this.messageSource.next(event);
}
}
}
发布事件:
constructor (
.......
private eventService: SiteManagementService,
) {}
........
this.eventService.publish(event);
订阅事件:
constructor (
.......
private eventService: SiteManagementService,
) {}
onInit() {
......
this.eventService.data.subscribe(event => {console.log("event received"});
}
有了上述,问题是只有一个接收组件(我有多个接收组件)接收一个事件,并且没有接收任何后续事件。
我做错什么了吗?有这方面的在线样本吗?
谢谢!
解决方案
您正在正确使用 BehaviorSubject。它会将最后发出的值重播给新订阅。
通过使用确保您的服务是单例的@Injectable({provideIn: "root"})
。
推荐阅读
- python - 使用 TensorFlow 从检查点重新开始训练后保留训练/验证拆分
- java - 供应商作为一种功能
- javascript - 当div(位置:固定)离开页面时如何使页面可滚动?
- jquery - 点击时不需要的滚动(仅在 Iphone 上)
- r - ggplot2:根据图形类型显示图例形状
- javascript - 仅使用 node.js 的 Google Analytics 跟踪
- .net - .NET 5 代码样式分析器的默认配置
- spring-boot - 在配置类中声明的打开 bean
- google-apps-script - 如何轻松刷新谷歌表格电子表格中的所有功能?(如删除函数并重新输入)
- python - Django中的属性错误,使用IMDbpy时