RxJS fromEvent运算符,在Angular中输出EventEmitter

时间:2018-03-12 04:16:32

标签: angular rxjs

ChildComponent会发出一个名为someEvent的事件。显然,我可以在ParentComponent声明为<child-component (someEvent)="onSomeEvent($event)"></child-component>,并使用onSomeEvent中的ParentComponent方法处理它。但我正在尝试的是我想在RxJS中使用fromEvent运算符处理事件。在fromEvent(this.childComponent.nativeElement, 'someEvent')获得ElementRef ChildComponent之后,我尝试了@ViewChild。我发现如果输出EventEmitter的事件名称与click之类的本机事件相同但上面的方法没有响应/工作,则上述方法有效。有没有办法让它与fromEvent一起使用?

1 个答案:

答案 0 :(得分:8)

如果您想将事件转换为可观察事件,可以使用Subject,如下所示:

@Component({
  selector: 'parent-component',
  template: `
    <child-component (someEvent)="subject.next($event)">
    </child-component>
  `
})
export class ParentComponent {
  public subject = new Subject<any>();
  constructor() {
    this.subject.pipe(
      tap(event => console.log(event)) // or whatever
    ).subscribe();
  }
}

这样做会为您提供一个可观察的来源 - 主题 - 它会发出事件发射器发出的任何值。从那以后,您可以使用RxJS运算符组合您想要的任何内容。