Myコンポーネントは現在の日時に依存するスタイルを持っています。私のコンポーネントでは、次の機能があります。コンポーネントのプロパティが現在の日時に依存する場合、Angular2 "式がチェックされた後に式が変更されました"
private fontColor(dto : Dto) : string {
// date d'exécution du dto
let dtoDate : Date = new Date(dto.LastExecution);
(...)
let color = "hsl(" + hue + ", 80%, " + (maxLigness - lightnessAmp) + "%)";
return color;
}
lightnessAmp
は、現在の日時から計算されます。色は、dtoDate
が過去24時間以内に変わると変わります。
正確なエラーは以下の通りです:
Expression has changed after it was checked. Previous value:
'hsl(123, 80%, 49%)'. Current value: 'hsl(123, 80%, 48%)'
私は例外値がチェックされているだけで、現時点では開発モードで表示されます知っています。チェックされた値が更新された値と異なる場合、例外がスローされます。
だから私は例外を防ぐために、以下のフックメソッドで各ライフサイクルで現在の日時を更新しようとしました:
ngAfterViewChecked()
{
console.log("! changement de la date du composant !");
this.dateNow = new Date();
}
...成功せず。明示的に変更した後
完璧なソリューション、ありがとうございました。私はそれが次のフック方法でも動作することに気づいた:ngOnChanges、ngDoCheck、ngAfterContentChecked。だから最高の選択肢はありますか? – abreneliere
あなたのユースケースによって異なります。コンポーネントが初期化されたときに何かしたいのであれば、通常は 'ngOnInit()'が最初です。コードがレンダリングされるDOMに依存する場合、 'ngAfterViewInit()'または 'ngAfterContentInit()'が次のオプションです。 'ngOnChanges()'は、入力が変更されるたびにコードを実行する必要がある場合に適しています。 'ngDoCheck()'はカスタム変更の検出用です。実際には 'ngAfterViewChecked()'が何のために最もよく使われているのか分かりません。私は 'ngAfterViewInit()'の直前または直後に呼び出されたと思います。 –
無効な値が設定されないようにthis.valueを変更しようとしていますが、ここで説明されている手法は私のためには機能しません。私はこれをやるべき他の方法がありますか? –