微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐