非常简单的基类 Closer
import {EventEmitter, Output} from 'angular2/core';
export class Closer {
@Output() closed: EventEmitter<any> = new EventEmitter();
constructor() {}
close() {
this.closed.emit({});
}
}
如果我扩展Closer
另一个类,然后用
<derived-class (closed)="closeHandler()"></derived-class>
closeHandler()
永远不会被调用。我可以看到 Closer.close()
被调用,但是 emit 不会被派生类传播,也不会被其模板包含派生类和事件绑定(bind)的类处理。
如果我只是将 @Output
移动到派生类,它就可以工作。但似乎 Angular2 应该把它放在派生类上。能够完全定义一组行为并继承它会很好。
最佳答案
今天早上我遇到了同样的问题,只是想出了解决办法。您所要做的就是将 outputs: ['closed'] 添加到扩展 Closer 的派生类的组件部分,并且您必须从中删除 @Output() Closer 类中的关闭声明
这是基于您的示例的快速演示:
派生类:
@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/