角度错误:ExpressionChangedAfterItHasBeenCheckedError

Jun*_*ias 5 runtime-error angular

我对 Angular 4 有点问题。下面的错误被抛出

错误:ExpressionChangedAfterItHasBeenCheckedError:检查后表达式已更改。以前的值:'225px'。当前值:'-21150px'。

这是我的 html:

<div class="channelRow" *ngFor="let epgChannel of channelGroupEpg?.epgChannels">
    <div class="epgChannelList">
      {{epgChannel.channel.name}}
    </div>
    <template ngFor let-epgDate [ngForOf]="epgChannel.dates">
        <div class="epgEntry" 
          *ngFor="let epgProgram of epgDate.programs" 
          [style.width]="getWidth(epgProgram, epgDate.date)" 
          (click)="selectProgram(epgProgram)" 
          data-toggle="modal" 
          data-target="#detailModal">
            {{epgProgram.title}}
        </div>
    </template>
</div>
Run Code Online (Sandbox Code Playgroud)

这就是错误的来源:

getWidth(program: EPGProgram, date: Date) {
  let min = this.helperService.getDurationByProgramInMinutes(program);
  let startDate = new Date(program.start.getFullYear(), program.start.getMonth(), program.start.getDate(), 0, 0, 0, 0);
  let stopDate = new Date(program.stop.getFullYear(), program.stop.getMonth(), program.stop.getDate(), 0, 0, 0, 0);
  if (startDate.getTime() !== date.getTime()) {
      let minNextDay = this.helperService.getMinutesToNextDay(program.start, date);
      min = min - minNextDay;
  } 
  if (stopDate.getTime() !== date.getTime()) {
      let minNextDay = this.helperService.getMinutesToLastDay(program.stop, date);
      min = min - minNextDay;
  }
  let width = min * 5;
  return width.toString() + 'px';
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我,为什么会这样?

use*_*316 6

检查后组件状态发生了变化...

this._changeDetectionRef.detectChanges();
Run Code Online (Sandbox Code Playgroud)

在你的方法结束时,不要忘记添加

private _changeDetectionRef : ChangeDetectorRef
Run Code Online (Sandbox Code Playgroud)

作为拥有您的方法的组件的构造函数的参数。

在这里查看讨论


Pat*_*dak 0

我输出了同样的错误。经过长时间的研究,我发现这是由于在角度刷新 html 之前输入到 html 模板的数据已更改而引起的。当您切换到生产模式时,不会显示此错误。请参阅此问题以获取更多信息。

  • 该错误不会在生产模式下显示,但这并不意味着您应该忽略它。 (3认同)