2017-10-24 20 views
0

最後のリクエスト(pingのようなもの)から経過したミリ秒を表示するビューがあります。例えば角4 ExpressionChangedAfterItHasBeenCheckedError(ミリ秒) - 回避方法

Ping: {{timePassed}} 

そして私はゲッターを持つコンポーネントがあります。

明らか
get timePassed() { 
    return new Date().getTime() - this.lastPacket; 
} 

を、私たちは二度timePassedを得るとき、我々は(たとえ1秒差で)2つの異なる値を取得します。このため、我々はExpressionChangedAfterItHasBeenCheckedErrorを取得します。

私はこのエラーがなぜ起こるのかを完全に認識していますが、この場合はこの値を1 msの精度で強く主張します。

この1つの特定の値の二重チェックをオフにすることができるのは本当に素晴らしいことです。

誰もこのような問題を処理する方法を知っていますか?あなたが明示的に変更をトリガすることによって、これを扱うことができる

答えて

1

import { ChangeDetectorRef } from '@angular/core'; 

constructor(private cdr: ChangeDetectorRef) {} 

get timePassed() { 
    this.timePassed = new Date().getTime() - this.lastPacket; 
    this.cdr.detectionChanges(); 
} 
+0

はこの良いアプローチですか?これを行うことの結果/否定? –

+0

本当にはい!通常これはAngularによって行われます。この場合、Angularsゾーン外で何らかの形で実行するとモデルが変更されます。 – Sajeetharan

+0

のように手作業で変更検出を呼び出すことができます。ゲッターから戻り値を削除しましたが無効です。新しい値を返す前にdetectChanges()を呼び出すことは可能ですか?私はそうは思わない。私はむしろ追加のタイムアウトまたは間隔を作成しないようにしたいと思います。 –

関連する問題