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({});
}
}
非常简单的基础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({});
}
}