从RXJS订阅onComplete回调时未捕获事件



我正在从HTTP请求中接收一些我想通过@Output和EventEmitter传递到父组件的数据。我的目标是在子组件中创建一个新项目,然后成功存储在后端,附加在后端创建的ID,将其附加到前端中的项目,最后将其添加到父视图中。

我尝试调用 this.newitem.emit(item( .finally(( callback和 .oncomplete((同时我们 onnext((。在所有情况下

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
}

我的预期输出是发射!,其次是从Child 收到的事件

,但截至目前,唯一的输出是发射!。。P>

编辑:(1(:删除 this.closeview((为我解决了问题。我认为问题在于,随着NG-Template的关闭,该事件被中止。

我的问题是我打电话给 this.closeview((关闭组件。我现在没有从孩子本身中关闭子组件,而是从父组件中调用销毁方法。我相信,如果事件的来源在A subscribe callback。

相关内容

  • 没有找到相关文章

最新更新