Angular:未收到事件发射器

时间:2017-09-20 11:32:18

标签: javascript angular

我有一个EventEmitter服务,如果数据发生变化就会被触发。

@Output() reservationChangedEvent = new EventEmitter<any>();

public notifyReservationsChanged() {
        this.reservationChangedEvent.emit({});
    }

数据更改是由从控制器启动的模式触发的。

在我的控制器中,我订阅了这些活动:

ngOnInit() {
        ...
        this.reservationService.reservationChangedEvent.subscribe(() => this.reloadData());
    }

我的问题是我无法在概览组件中接收事件。如果我在我的服务或我的模态中订阅事件(用于检查),我会收到它们。

任何想法为什么概述控制器无法接收事件?

2 个答案:

答案 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();
}