Angular 2 Base Class 输出 EventEmitter 未引发或处理

Angular 2 Base Class Output EventEmitter doesn't get raised or handled

非常简单的基础classCloser

import {EventEmitter, Output} from 'angular2/core';

export class Closer {
  @Output() closed: EventEmitter<any> = new EventEmitter();

  constructor() {}

  close() {
    this.closed.emit({});
  }
}

如果我 extends Closer 另一个 class 然后用

标记
<derived-class (closed)="closeHandler()"></derived-class>

closeHandler() 永远不会被调用。我可以看到 Closer.close() 被调用,但是发射不会被派生的 class 传播或由其模板包含派生的 class 和事件绑定的 class 处理。

如果我只是将 @Output 移动到派生的 class 它就可以了。但似乎 Angular2 应该把它放在派生的 classes 上。能够完全定义一组行为并继承它会很好。

今天早上我遇到了同样的问题,只是想出了解决办法。您所要做的就是将 outputs: ['closed'] 添加到正在扩展 Closer 的派生 class 的组件部分,您必须删除 @Output() 来自 Closer 中的关闭声明 class

这是基于您的示例的快速演示:

派生Class:

@Component({
  selector: 'derived-class',
  outputs: ['closed']
})
export class DerivedClass extends Closer {}

更近Class:

import {EventEmitter} from 'angular2/core';

export class Closer {
  closed: EventEmitter<any> = new EventEmitter();

  constructor() {}

  close() {
    this.closed.emit({});
  }
}