ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后发生了变化。上一个值:'ngIf:false'。当前值:'ngIf:true'

时间:2018-01-25 00:26:44

标签: javascript html angular

演示: https://stackblitz.com/angular/mxoemeygmlk?file=app%2Ftable-http-example.ts

此角度误差的最佳解决方案是什么:

enter image description here

2 个答案:

答案 0 :(得分:1)

我知道的解决方法(hack)就是使用setTimeout(function , 0)将函数发送到事件循环的末尾,直到angular完成检查,如下所示:

  constructor(private http: HttpClient) {}

  ngAfterViewInit() {
    setTimeout(() => this.ngAfterViewInitUtil(), 0);
  }
  ngAfterViewInitUtil(){
    this.exampleDatabase = new ExampleHttpDao(this.http);
    // The rest of the code

另请注意,此错误仅在开发模式下发生,并且不会在生产模式下发生,因为angular不会在生产模式下重新检查应用程序的状态。

您可以在this page

中详细了解此错误

答案 1 :(得分:0)

使用 setTimeout 并不是解决此问题的正确方法 您应该使用

ChangeDetectorRef

constructor( private cdr: ChangeDetectorRef){}
  ngOnInit(){
  this.chu.checkShow.subscribe( value => {
      // do something
      this.cdr.detectChanges();
  });
}