所以我有一个事件发射器工作得很好。在我的 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/