ExpressionChangedAfterItHasBeenCheckedError with MomentJS fromNow() - Angular 5

时间:2018-01-19 14:57:52

标签: angular momentjs

我正在使用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()。第一个没有做任何事情,第二个没有给我带来某种回溯错误。

0 个答案:

没有答案