我正在从HTTP请求中接收一些我想通过@Output和EventEmitter传递到父组件的数据。我的目标是在子组件中创建一个新项目,然后成功存储在后端,附加在后端创建的ID,将其附加到前端中的项目,最后将其添加到父视图中。
我尝试调用 this.newitem.emit(item(从 .finally(( callback和 .oncomplete((同时我们 onnext((。在所有情况下 我故意省略了一些无关的html。 我的预期输出是发射!,其次是从Child 收到的事件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.
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
}
编辑:(1(:删除 this.closeview((为我解决了问题。我认为问题在于,随着NG-Template的关闭,该事件被中止。
我的问题是我打电话给 this.closeview((关闭组件。我现在没有从孩子本身中关闭子组件,而是从父组件中调用销毁方法。我相信,如果事件的来源在A subscribe callback。