我创建了一个EventBusService
和EventData
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) {}
}