Angular 2 中 EventEmitter.next() 和 EventEmitter.emit() 的区别

Difference between EventEmitter.next() and EventEmitter.emit() in Angular 2

EventEmitter.emit()EventEmitter.next()有什么区别?两者都将事件分派给订阅的侦听器。

export class MyService {
  @Output() someEvent$: EventEmitter<any> = new EventEmitter();

  someFunc() {
   this.someEvent$.emit({myObj: true});

   this.someEvent$.next({myObj: true});
  }
}

documenation for the EventEmitter 目前没有太大帮助。

他们也这样做。 emit() 是当前版本,next() 已弃用。

另见 https://github.com/angular/angular/blob/b5b6ece65a96f5b8f134ad4899b56bf84afe3ba0/modules/angular2/src/facade/async.dart#L49

在最新版本(Ng9)中,event_emitter.ts的源代码如下:

export class EventEmitter<T extends any> extends Subject<T> {
  /**
   * Emits an event containing a given value.
   * @param value The value to emit.
   */
  emit(value?: T) { super.next(value); }
}

EventEmitter 从父 class Subject 扩展而来。正如您所料,emit 方法调用 super.next()