首页 > 解决方案 > 在父级的 ngOnDestroy 之后未调用 Angular ngOnChanges

问题描述

我有一个接受输入的子组件

<app-custom [customModel]="customModel"></app-custom>

在子组件中,我通过执行以下操作检测对 customModel 输入的更改:

@Input() customModel: CustomModel;

ngOnChanges(changes: SimpleChanges) {
  console.log('changes', changes); // -> does not get called from ngOnDestroy of parent 
}

在我的父组件中,我想在父组件被销毁时通知子组件

customModel = null;

ngOnDestroy() {
  let obj = new CustomModel();
  obj.state = 0;
  this.customModel = obj;
}

当父组件的 ngOnDestroy 中输入 customModel 发生变化时,子组件的 ngOnChanges 不会被调用。为什么会发生这种情况?

我在孩子中有一个音频元素,即使在父母被破坏后仍然可以听到音频。

ngOnChanges 在我更改输入时在其他情况下被调用,但不是通过 ngOnDestroy

标签: angularngoninitngonchangesangular-lifecycle-hooksngondestroy

解决方案


我认为是因为子组件在其父组件之前被销毁。您可以通过两个组件的 ngOnDestroy() 方法中的简单日志来检查这一点。

更新

因此,如果您想停止当前正在运行的音频,只需在子组件被销毁时执行它。


推荐阅读