使用事件总线实现订阅主题时未定义的值



我创建了一个EventBusServiceEventData

export class EventData {
public eventName: string;
public event: any;
constructor(eventName: string, event: any) {
this.eventName = eventName;
this.event = event;
}
}

@Injectable({providedIn: 'root'})
export class EventBusService {
private subject = new Subject();
public emit(event: EventData) {
this.subject.next(event);
}
public on(eventName: string, action: any): Subscription {
return this.subject.pipe(
filter( (e: EventData) => e.eventName === eventName),
map( (e: EventData) => e['value'])).subscribe(action);
}
}

这就是我发出事件的方式

this.eventBusService.emit(new EventData('SelectDefaultList', list));

这些值已发出,但我在订阅/收听EventBusService时总是得到undefined

ngOnInit() {
this.eventBusService.on('SelectDefaultList', (list: List) => {
console.log('hello' + list);
});
}

这两个组件位于一个模块下,我将EventBusService声明为提供程序。

谢谢~

如果EventData没有value属性,则此处返回 undefined -(e: EventData) => e['value'])

还可以通过将public移动到构造函数属性来简化其类:

export class EventData {
constructor(public eventName: string, public event: any) {}
}

最新更新