所以我有一个事件发射器工作得很好。在我的 child 中,我调用了一个函数:

(click)="EnterEditMode()

哪个火:
EnterEditMode(){
    this.enterEdit.emit(null);
  }

在我的 parent 中,我然后:
  enterEdit(){
    console.log("got some text");
  }

这完美无缺。但现在我想在它旁边添加第二个输出。所以在 child 中,我称之为:
SaveChanges();

触发一个函数:
SaveChanges() {
    this.saveChanges.emit(null);
    console.log("save");
  }

当我调用它时,控制台日志被触发,但未触发发射。我的 parent 有一个因此永远不会被调用的函数。
saveChanges() {
    console.log("saving changes");
    this.editing ? this.editing = false : this.editing = true;
  }

我真的看不出我做错了什么,并试图解决问题,但我没有收到任何错误,只是控制台日志中已调用“SaveChanges()”。我是否缺少有关发射器的信息?

编辑以显示我的事件发射器

在我的子组件中,我:
@Output() enterEdit = new EventEmitter<any>();
@Output() saveChanges = new EventEmitter<any>();

同样, enterEdit 有效但 saveChanges 不...

最佳答案

在我的特殊情况下,我在没有警告或消息的情况下遇到了这个问题。

我的误解如下:

<app-child [someObject]="currentObject" (emitEventFunction)="saveChange($event)">

在我的模板标签中,我放置了发出事件的函数的名称 emitEventFunction() ,而不是放置我用 @Output() 装饰器声明的对象。这意味着当我试图在我的子组件中调用 emitEventFunction() 函数时调用 saveChange() 函数时,Angular 实际上正在寻找一个名为 emitEventFunction 的对象。

解决方案自然是找到我声明为我的输出的内容:
@Output() entryChange = new EventEmitter<any>();
并使用它:
<app-child [someObject]="currentObject" (entryChange )="saveChange($event)">

关于Angular 4 事件发射器不发射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47685177/

10-12 22:08