父类的Angular2 EventEmitter

时间:2016-04-20 11:59:14

标签: angular typescript events inheritance

我创建了一个抽象超类来处理我的应用程序中各种表单组件的泛型因素。

由于某种原因,我无法正确捕获派生类发出的事件,而EventEmitter是在超类中声明的。

超类:

export abstract class Form<T> implements OnInit {
    @Output() submitted : EventEmitter<T> = new EventEmitter<T>();
    fb                  : FormBuilder     = new FormBuilder();
    formModel           : ControlGroup;

    abstract ngOnInit() : any;
}

派生:

export class LoginFormComponent extends Form<Login> {

    credentials : Login = new Login();

    constructor() {
        super();
    }

    doLogin() {
        this.submitted.emit(this.credentials);
    }
}

封装元素的HTML:

<login-form (submitted)="login($event)"></login-form>\

当我将EventEmitter移动到派生类时,一切都像魅力一样。 我需要更改哪些内容才能生效?

2 个答案:

答案 0 :(得分:4)

Angular不承认超类中的这些装饰器。

您可以使用@Component()注释

启用它们
@Component({
  selector: '...',
  outputs: ['submitted'],
  inputs: ['...']
})

另见https://github.com/angular/angular/issues/5415

答案 1 :(得分:0)

问题是@Component装饰器不支持继承(父类中定义的元素)。它仅考虑当前装饰类中定义的元素。