可观察的订阅仅接收第一个事件

时间:2019-04-01 20:41:46

标签: angular rxjs6 behaviorsubject

我有一些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"});
}

具有以上所述,问题是只有一个接收组件(我有多个接收组件)接收一个事件,而没有接收任何后续事件。

我做错了什么吗?有在线样本吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您正在正确使用BehaviorSubject。它将重播上次发出的值给新订阅。

通过使用@Injectable({provideIn: "root"})确保您的服务是单例。

相关问题