async-await – async / await防止Angular2在模板语句中使用时呈现组件

前端之家收集整理的这篇文章主要介绍了async-await – async / await防止Angular2在模板语句中使用时呈现组件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
单击组件的按钮时将执行以下方法.
async onClickButton() {
    await this.shoppingCartService.add(this.selectedOffer);
    this.router.navigate(['ShoppingCartComponent']);
}

数据将添加到购物车,但在导航到下一页时,只会呈现标题,而数据则不会.此方法有效,如果不使用async-await,将正确呈现以下页面.
使用ChangeDetectorRef.detectChanges()和ApplicationRef.tick()强制更改检测无效.
离开下一页即ShoppingCartComponent后,将进行渲染,并暂时显示数据.
什么想法可能会出错?

解决方法

这是async / await的已知问题.它导致代码跟随等待不在Angulars区域内运行.

作为解决方法,您需要在构造函数中注入NgZone并将代码更改为

async onClickButton() {
    await this.shoppingCartService.add(this.selectedOffer);
    this.ngZone.run(() => {
      this.router.navigate(['ShoppingCartComponent']);
    });
}

另见https://github.com/angular/angular/issues/322

猜你在找的Java相关文章