Angular 角度:错误错误:表达式ChangedTerrithasBeenCheckedError:表达式在检查后已更改

Angular 角度:错误错误:表达式ChangedTerrithasBeenCheckedError:表达式在检查后已更改,angular,Angular,怎么了? 在控制台中获取以下错误: AboutComponent.html:1错误:ExpressionChangedTerrithasBeenCheckedError:检查后,表达式已更改。上一个值:“null:未定义”。当前值:“null:[对象]” 从'@angular/core'导入{AfterViewInit,Component}; 导出类测试{ } @组成部分({ 选择器:“应用程序关于”, 模板:` {{asd}} ` }) 导出类AboutComponent在ViewInit之后

怎么了? 在控制台中获取以下错误:

AboutComponent.html:1错误:ExpressionChangedTerrithasBeenCheckedError:检查后,表达式已更改。上一个值:“null:未定义”。当前值:“null:[对象]”

从'@angular/core'导入{AfterViewInit,Component};
导出类测试{
}
@组成部分({
选择器:“应用程序关于”,
模板:`
{{asd}}
`
})
导出类AboutComponent在ViewInit之后实现{
asd:测试;
ngAfterViewInit():void{
this.asd=新测试();
}
}
当执行角度处理时,在渲染部分之前调用一些生命周期挂钩 然后调用绑定和一些绑定

参考:

该错误是由于在处理完所有绑定后从角度调用此ngAfterViewInit方法造成的。要消除此错误,可以执行以下操作

将代码移动到Ngonit生命周期挂钩中

ngOnInit() {
    this.data = new Test()
}

将代码包装在setTimeout()中


关于同一问题的精彩文章:

您也可以在ngAfterViewInit()中进行更改后强制进行更改检测,如下所示:


这里有一个关于这个的讨论:这也是一个很好的参考:这个答案引导我在我的应用程序中找到了解决方案,其中@ViewChild('form',{static:false})form:FormGroup;必须更改为{static:true}。谢谢。你是welcom@Mirosław
 ngAfterViewInit() {
    setTimeout(()=>this.data = new Test(),0)
  }
import { AfterViewInit, Component, ChangeDetectorRef} from '@angular/core';

export class Test {

}

@Component({
  selector: 'app-about',
  template: `
    {{asd}}
  `
})
export class AboutComponent implements AfterViewInit {

  asd: Test;

  constructor(
    private cdRef: ChangeDetectorRef   
  ) { }

  ngAfterViewInit(): void {
    this.asd = new Test();
    this.cdRef.detectChanges(); 
  }
}