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

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

非常简单的基类 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/

相关文章:

eclipse - 如何识别来自 Eclipse 中 CompareEditorInput 的文本选择事件的来源?

android - 处理文件选择器android 6.0 webview

c++ - 如何接受/忽略 QKeyEvent

javascript - Angular:基于属性的样式

angular - 如何使用 Angular 2 路由器重新加载当前路由

C++:派生类, "no matching constructor"错误

c++ - 复制基类的构造函数

Delphi 空闲处理程序仅在我移动鼠标时触发

angular - 获取 "No ' Access-Control-Allow-Origin' header is present on the requested resource"错误,即使 CORS 设置正确

c# - 只允许将特定对象类型传递到基于派生类类型的方法中