如何在Angular2 +中解决在promise中解决的事件

时间:2018-03-28 19:03:15

标签: angular events eventemitter

我有以下代码

this.expenseClaimService.saveExpenseItem(this.item)
      .then((data) => {
          Object.assign(this.item, data);
          console.log('saveExpenseItem.then', data);
          this.onCategorySelected.emit();
        });
      });

我在解决诺言时发出事件,

问题是事件处理程序没有捕获事件。

如果我在代码中发出相同的事件(不是它承诺解决),它工作正常,这意味着一切都正确连接。

更新(已解决)

我发现了什么是错的,我在ngIf中有了组件,在我的承诺被解决的时候,值被改变了,因为ngIf变为假,然后组件被破坏,并且没有观察者对该事件的了解。所以我将其更改为hidden,现在它可以正常工作。

<div *ngIf="this.item" [hidden]="this.item.ExpenseCategoryId != null">
  <app-expense-item-category-selector [item]="item" (onCategorySelected)="onCategorySelected($event)"></app-expense-item-category-selector>
</div>

我保留了问题,如果其他人遇到同样的问题,我也不会将其删除

1 个答案:

答案 0 :(得分:1)

假设在子组件中发生了服务调用,我建议以下内容以避免范围驱动的问题:

aMethod(){
  this.expenseClaimService.saveExpenseItem(this.item)
    .then((data) => {
       console.log('saveExpenseItem.then', data);
       this.doEmit();
     });
   });
}

private doEmit(){
   this.onCategorySelected.emit();
}