Calling toISOString() thows "ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked."
Calling toISOString() thows "ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked."
我在组件中有这个方法:
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()
时才会看到此错误。如果我只是 return Date
对象,那没问题,但将其转换为 ISO 字符串会出现异常。为什么?
谈论 toISOString()
-
中的时区信息实际上在哪里
2017-11-14T10:30:00.271Z
?对我来说,它实际上应该是
2017-11-14T10:30:00.271Z+01:00
发生这种情况是因为每次 getTime
调用的毫秒数都会发生变化,这就是错误所说的内容。
应该是:
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 了解可能的解决方案。
我在组件中有这个方法:
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()
时才会看到此错误。如果我只是 return Date
对象,那没问题,但将其转换为 ISO 字符串会出现异常。为什么?
谈论 toISOString()
-
2017-11-14T10:30:00.271Z
?对我来说,它实际上应该是
2017-11-14T10:30:00.271Z+01:00
发生这种情况是因为每次 getTime
调用的毫秒数都会发生变化,这就是错误所说的内容。
应该是:
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 了解可能的解决方案。