2017-11-14 11 views
0

私はコンポーネントで、ここでこの方法を持っている:私は別の内呼んtoISOString()を呼び出すと、 "ExpressionChangedAfterItHasBeenCheckedError:式がチェックされた後に変更されました。"

getTime(): Date { 
    const date = new Date(); 
    date.setHours(this.hour); 
    date.setMinutes(this.minute); 
    date.setSeconds(0); 
    return date; 
} 

<input matInput [hidden]="true" formControlName="time" 
      [ngModel]="this.timePicker.getTime().toISOString()"/> 

しかし、stringが正しく生成されますにもかかわらず、(少なくとも、それはJSONがどのように見えるかです) :

"time": "2017-11-14T10:30:00.271Z" 

私はこのエラーを取得しています:

CreateGroupComponent.html:40 ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '2017-11-14T10:30:00.338Z'. Current value: '2017-11-14T10:30:00.341Z'. 
    at viewDebugError (core.js:9514) 
    at expressionChangedAfterItHasBeenCheckedError (core.js:9492) 
    at checkBindingNoChanges (core.js:9661) 
    at checkNoChangesNodeInline (core.js:13674) 
    at checkNoChangesNode (core.js:13646) 
    at debugCheckNoChangesNode (

toISOString()に電話する場合のみ、このエラーが表示されます。 Dateオブジェクトを返しても問題ありませんが、ISO文字列に変換するとその例外が発生します。どうして?


についてtoISOString()を話す - どこ実際

2017-11-14T10:30:00.271Z 

でタイムゾーン情報ですか?私にとって、実際にミリ秒ごとgetTime呼び出しに変更するので、これが起こる

2017-11-14T10:30:00.271Z+01:00 
+0

Btw、なぜngModelとフォームコントロールが同時に存在するのですか?通常、それらは相互に排他的です。 – estus

答えて

0

ことになって、これはエラーが言うことです。

それは次のようになります。

getTime(): Date { 
    const date = new Date(); 
    date.setHours(this.hour); 
    date.setMinutes(this.minute); 
    date.setSeconds(0); 
    date.setMilliseconds(0); 
    return date; 
} 

タイムゾーンについては、the reference状態、

The toISOString() method returns a string in simplified extended ISO format (ISO 8601) <...>. The timezone is always zero UTC offset, as denoted by the suffix "Z".

現地時間が予想される場合は、可能な解決策のためのthis questionを参照してください。

関連する問題