【问题标题】:Angular 2 Base Class Output EventEmitter doesn't get raised or handledAngular 2基类输出EventEmitter没有得到提升或处理
【发布时间】:2016-07-25 20:32:11
【问题描述】:

非常简单的基类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() 被调用,但是派生类不会传播或由其模板包含派生类和事件绑定的类处理。

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

【问题讨论】:

    标签: event-handling angular derived-class base-class eventemitter


    【解决方案1】:

    今天早上我遇到了同样的问题,只是想出了如何解决。您所要做的就是将 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({});
      }
    }
    

    【讨论】:

    • 谢谢你!请注意,如果您使用 tslint,您可以使用 // tslint:disable-next-line:use-output-property-decorator 禁用 linter 错误
    猜你喜欢
    • 2017-05-13
    • 2018-12-04
    • 2017-02-02
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    相关资源
    最近更新 更多