我从 http 请求中接收到一些数据,我想通过 @Output 和 EventEmitter 将这些数据中继到父组件。我的目标是在子组件中新建一个item,在后端成功存储后,追加一个在后端创建的Id,追加到frontEnd中的item,最后添加到父view。
我尝试从.finally()回调和.onComplete()以及onNext() 内部调用this.newItem.emit(item )。在所有情况下,事件都没有在父组件中被捕获,除非我在.subscribe()块之后立即发出项目
child.ts
/* */
@Output() newItemEmitter= new EventEmitter();
/* */
saveItem() {
let itemToView: {
... // A lot of data
};
this.itemService.saveItem(item).subscribe(result => {
itemToView = {
...
Id: result.Data
}
}, error => {console.log(error)}
, () => { console.log('Emitting!'); this.newItemEmitter.emit(itemToView) }
}
this.closeView() // Was not originally included. (1)
}
// this.newItemEmitter.emit(itemToView) // If emitting from
// here, itemToView will not contain the right Id from the backend.
我故意省略了一些不相关的 html。
parent.html
<ng-template let-c="close" let-d="dismiss">
<fixed-item (newItemEmitter)="addNewItemToView($event)" (closed)="closeAddNewItemTemplateView()">
</fixed-item>
</ng-template>
parent.ts
addNewItemToView($event) {
console.log('Received event from child: ', $event)
// Add to view here
}
我的预期输出是Emitting!其次是收到来自孩子的事件,但截至目前,唯一的输出是Emitting!.
编辑:(1):删除this.closeView()为我解决了这个问题。我认为问题在于事件在 ng-template 关闭时被中止。