非常简单的基类Closer

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

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

  constructor() {}

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

如果我extends Closer另一个类,然后用标记它
<derived-class (closed)="closeHandler()"></derived-class>
closeHandler()将永远不会被调用。我可以看到Closer.close()被调用,但是发射不会被派生类传播,也不会被其模板包含派生类和事件绑定(bind)的类处理。

如果我只是简单地将@Output移动到派生类,则它可以工作。但是,似乎Angular2应该将其放在派生类上。完全定义一组行为并继承它的能力将是不错的。

最佳答案

今天早上我遇到了同样的问题,只是想出了解决方法。您所需要做的就是将输出:['closed'] 添加到扩展Closer的派生类的组件部分,您必须从Closer类内部的封闭声明中删除 @Output()

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

派生类:

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

进修类:
import {EventEmitter} from 'angular2/core';

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

  constructor() {}

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

关于event-handling - Angular 2基类输出EventEmitter不会被引发或处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36434181/

10-08 23:03