单击组件的按钮时将执行以下方法.
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