ng4:ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后发生了变化

时间:2018-05-14 09:10:42

标签: angular angular5 angular2-template angular-material-stepper

我正在使用角度材质步进器,功能正在按预期工作并低于错误:

enter image description here

Live Demo:

2 个答案:

答案 0 :(得分:0)

当您在ngAfterInit方法的开头更改值时,有时需要延迟。

    setTimeout(() => {
          //Code Here
      x=Object //new value
        }, 0);
    setTimeout(() => {
          //Code Here
        });

这对我有用

答案 1 :(得分:0)

通常避免使用ExpressionChangedAfterItHasBeenCheckedError的另一种方法是在组件中使用ChangeDetectionStrategy.OnPush

@Component({
    selector: 'my-component',
    templateUrl: '/path/to/my-component.html',
    changeDetection: ChangeDetectionStrategy.OnPush,
})
export class MyComponent {}

使用Push ChangeDetectionStrategy的组件仅在显示的数据已更改时才重新渲染DOM,而不是在每个Angular更改检测周期上都重新渲染。因此,这在客户端上节省了很多资源。

您可能要考虑“下行”,即通过@Input()传递的对象引用不会触发此组件的更改检测,因此最终需要通过ChangeDetectorRef手动触发它,但是最后这种方法将导致更清洁的组件属性/数据流管理。