可观察订阅仅接收第一个事件
Observable subscription only recieve the first event
我有几个 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"})
确保您的服务是单例的。
我有几个 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"})
确保您的服务是单例的。