我有一个EventEmitter服务,如果数据发生变化就会被触发。
@Output() reservationChangedEvent = new EventEmitter<any>();
public notifyReservationsChanged() {
this.reservationChangedEvent.emit({});
}
数据更改是由从控制器启动的模式触发的。
在我的控制器中,我订阅了这些活动:
ngOnInit() {
...
this.reservationService.reservationChangedEvent.subscribe(() => this.reloadData());
}
我的问题是我无法在概览组件中接收事件。如果我在我的服务或我的模态中订阅事件(用于检查),我会收到它们。
任何想法为什么概述控制器无法接收事件?
答案 0 :(得分:1)
你应该改变:
@Output() reservationChangedEvent = new EventEmitter<any>();
为:
reservationChangedSubject = new Subject<any>();
reservationChangedEvent = this.reservationChangedSubject.asObservable()
和此:
public notifyReservationsChanged() {
this.reservationChangedEvent.emit({});
}
为:
public notifyReservationsChanged() {
this.reservationChangedSubject.next({});
}
答案 1 :(得分:0)
@Output()
和EventEmitter
仅用于组件,而不是用于服务。
对于服务,您应该使用Subject
代替。
您的服务应包含:
private reservationChangedSource = new Subject<any>();
reservationChanged$ = this.reservationChangedSource.asObservable();
notifyReservationsChanged() {
this.reservationChangedEvent.next({});
}
在您的组件中:
reservationChangeSubscription: Subscription;
ngOnInit() {
...
this.reservationChangeSubscription = this.reservationService.reservationChanged$
.subscribe(() => this.reloadData());
}
ngOnDestroy() {
this.reservationChangeSubscription.unsubscribe();
}