答案 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
手动触发它,但是最后这种方法将导致更清洁的组件属性/数据流管理。