【问题标题】:How to emit event in promise resolved in Angular2+如何在Angular 2中的promise resolve中发出事件
【发布时间】:2018-09-07 14:20:36
【问题描述】:

我有以下代码

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

当 promise 解决时我会发出事件,

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

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

更新(已解决)

我发现了问题所在,我在 ngIf 中有组件,在我的 promise 被解决时,值以某种方式更改,ngIf 变为 false,然后组件被销毁,并且不再有该事件的观察者。所以我把它改成了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>

我保留这个问题,我不会删除它以防其他人有同样的问题

【问题讨论】:

  • 似乎是范围问题。您是否尝试将发射调用放入本地方法并改为调用此方法?
  • 您的订阅者是什么样的?它是在同一个组件或服务中还是在其他地方?您如何找到它以及何时找到它?
  • @Zlatko &lt;app-expense-item-category-selector [item]="item" (onCategorySelected)="onCategorySelected()"

标签: angular events eventemitter


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多