我有一个Angular组件,显示一些信息(为了这个场景的目的)。在我的typesript组件中,我有一个函数,可以显示新数据。为了方案,让我们说组件无法呈现新信息,除非我重新渲染它。这次我使用setTimeout()这样做:
updateData(){
this.data=this.dataService.getData();
this.showComponent=false;
setTimeout(()=>{this.showComponent=true;},1);
}
这样我确信我的组件将被重新渲染。我知道这是解决问题的一种非常愚蠢的方式。我怎么能做得更好?
dataService.getData()
应返回您订阅的Observable。然后将showComponent
设置为true。
像这样的东西:
this.dataService.getData(
(data) => {
this.data = data;
this.showComponent = true;
}
);
在DOM事件,http请求等异步操作上触发角度变化检测。因此,如果您同步更新值,则更改检测引擎可能会错过这些更改。
所以有两种方法可以解决这个问题:像你一样运行setTimeout
或者在下一个摘要循环orChangeDetectorRef.markForCheck()
上运行ChangeDetectorRef.detectCahnges()
标记组件以立即运行检查。