我从子组件(timerrenderer)Angular 7得到ExpressionChangedAfterIt HasB



我的子组件出现ExpressionChangedAfterItHasBeenCheckedError错误。我试图在ngOnchanges中添加detectChanges((方法,但没有成功。我是刚接触棱角分明的人。我也尝试了其他问题的解决方案,但对我不起作用

ngOnInit() {
if (this.IsInGrid === false) {
this.duration = this.Duration * 60 * 60 * 1000;
this.startDate = this.StartDate;
this.timerText();
this.init(null);
}
}
ngOnChanges() {
this.changeDetector.detectChanges();
}
ngAfterViewChecked() {
this.changeDetector.detectChanges();
}

agInit(params: any): void {
this.params = params;
this.init(params);
}

init(params: any) {

}

timerText(): string {
if (this.StartDate == null) {
return "";
}
this.elapsed = new Date().getTime() - this.StartDate.getTime();
if (this.elapsed > this.duration) {
this.isPassed = true;
}

return this.msToTime(this.elapsed);
}

msToTime(ms, delim = ' : ') {
const showWith0 = value => (value < 10 ? `0${value}` : value);
const days = Math.floor((ms / (1000.0 * 60 * 60 * 24)));
const hours = showWith0(Math.floor((ms / (1000.0 * 60 * 60)) % 24));
const minutes = showWith0(Math.floor((ms / (1000.0 * 60)) % 60));

if (days > 0)
return `${days}d ${hours}h ${minutes}m`;
if (hours > 0)
return `${hours}h ${minutes}m`;
return `${minutes} minutes`;
}

refresh(params: any): boolean {
return true;
}
}

我在组件中添加了changeDetection:ChangeDetectionStrategy.OnPush,它似乎对我有效。我找到了解决方案的正确解释。

来源:

https://medium.com/@bencabanes/角度变化-检测策略-引入-819aaa7204e7

调试这些错误有点像黑艺术。虽然我不能评论你的代码,但我可以给你一些建议,帮助我摆脱它们。

据我所知,当设置并检查初始值后更新属性时,就会显示此消息。

首先,使用Angular Lifecycle挂钩来设置这些值https://angular.io/guide/lifecycle-hooks,特别是ngAfterViewInit((。使用ngOnChanges((,您可能会获得性能提升。

ExpressionChangedAfterIt HasBeenCheckedError解释

相关内容

  • 没有找到相关文章

最新更新