我正在使用Angular 5开发一个应用程序,它通过服务中的websockets(使用Socket.IO)接收大量数据,通过Subjects
传递给组件,然后,该组件,给出一个对象(通过websockets/subjects
更新)作为另一个组件的输入。最后一个组件显示信息。
我需要显示的信息之一是#34;多久以前发生了什么事情"并且要做到这一点,我正在接收时间戳,并使用MomentJS解析它,然后使用MomentJS& #39; s fromNow()
显示"多久以前它确实发生了#34;但是,我得到了一个
ExpressionChangedAfterItHasBeenCheckedError:表达式已更改 检查后。以前的价值:' hace unos segundos'。当前 价值:' hace un minuto'。
我所读到的是,我在更新值时可以使用ChangeDetectorRef's detechChanges()
,但它没有解决它。从我看到的情况来看,我的问题不在于更新值,而是因为fromNow()
返回值在几秒钟之前从""到了#34;一分钟前"在Angular进行检查的那一刻。有什么方法可以解决这个错误吗?
我的应用程序的逻辑解释得更好:
Websocket数据 - > SocketioService接收它 - >服务通过Subject to ShovelsComponent推送数据 - > ShovelsComponent更新对象中的数据(每个铲子有一个)。 ShovelsComponent有很多ShovelComponent孩子 - > ShovelsComponent将此对象作为输入传递给ShovelComponent,后者显示对象的信息。 - >当displayLastLoop()的值发生变化时,ShovelComponent会抛出错误。
displayLastLoop() {
if (this.shovel.lastLoop) {
return this.shovel.lastLoop.fromNow();
} else {
return '[Sin información]';
}
}
在更新ShovelsComponent中的值和displayLastLoop()内部后,我尝试使用ChangeDetectorRef的detectChanges()。第一个没有做任何事情,第二个没有给我带来某种回溯错误。