从孩子的ngOnInit发出事件以获取要绑定的数据会导致ExpressionChangedAfterItHaHasBeenCheckedError

时间:2018-09-12 15:56:14

标签: angular

ListComponent中,应该使用一些初始化逻辑。准备工作完成后,会从ngOnInit发出事件。 AppComponent正在侦听事件以提供要绑定的数据。

主要组件:

export class AppComponent {
  someList$: Observable<string[]>;

  // initialized EventEmitter       
  onListInit() {
    this.someList$ = of(['Angular', 'React']);
  }
}

孩子

export class ListComponent  {
  @Input() someList = [];
  @Output() initialized: EventEmitter<any> = new EventEmitter();

   ngOnInit() {
     // setTimeout(() => this.initialized.emit());     
     this.initialized.emit();
   }   
}

这将导致ExpressionChangedAfterItHasBeenCheckedError。通常,我理解为什么会发生这种情况,但仍然感到惊讶,为什么在事件处理后不运行更改检测(发出和侦听不是异步操作?)。

有没有setTimeout,ChangeDetectorRef等的好方法吗?

https://medium.com/ios-os-x-development/ios-tips-pull-to-refresh-in-less-than-30-seconds-ef884520f0df

0 个答案:

没有答案