Angular 2基类输出EventEmitter不会被引发或处理

jky*_*sey 6 base-class derived-class event-handling eventemitter angular

非常简单的基类 Closer

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

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

  constructor() {}

  close() {
    this.closed.emit({});
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我是extends Closer另一个班级然后用它来标记

<derived-class (closed)="closeHandler()"></derived-class>
Run Code Online (Sandbox Code Playgroud)

closeHandler()永远不会被召唤.我可以看到Closer.close()被调用但是emit不会被派生类传播,也不会被其模板包含派生类和事件绑定的类处理.

如果我只是将其移动@Output到派生类,它就可以工作.但似乎Angular2应该将它放在派生类上.完全定义一组行为并继承它的能力会很好.

Mar*_*kov 7

今天早上我遇到了同样的问题,并且想出了怎么做.您所要做的就是将输出:['closed']添加到派生类的组件部分,该类扩展Closer,您必须从Closer类中的关闭声明中删除@Output()

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

派生类:

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

更接近的类:

import {EventEmitter} from 'angular2/core';

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

  constructor() {}

  close() {
    this.closed.emit({});
  }
}
Run Code Online (Sandbox Code Playgroud)