【问题标题】:Angular ngOnChanges not called after ngOnDestroy of parent在父级的 ngOnDestroy 之后未调用 Angular ngOnChanges
【发布时间】:2020-04-02 11:11:53
【问题描述】:

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

<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

【问题讨论】:

  • 如果父母死了,孩子也死了,因此父母 - 孩子的关系。可以通过 ViewChild 引用子组件,然后在 ngOnDestroy 中调用父组件的方法
  • @Dino 我可以在父母中有多个这样的孩子,那我该怎么做?

标签: angular ngoninit ngonchanges angular-lifecycle-hooks ngondestroy


【解决方案1】:

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

更新

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

【讨论】:

  • 当您更改 ngOnDestroy() 父方法中的 customModel 输入时,子组件甚至不存在,因此无法处理。
  • 那么在这种情况下如何将数据传递给子组件呢?我在孩子中有一个音频元素,即使在父母被破坏后音频仍在播放
  • 告诉我们更多关于您的要求
  • 我在子组件中有一个音频元素。当父组件被销毁时,仍然可以听到来自子组件的音频
  • 你可以在 ngOnDestroy() 子方法中处理这个
猜你喜欢
  • 2020-10-14
  • 2021-06-27
  • 1970-01-01
  • 2019-03-01
  • 2021-01-09
  • 2018-06-13
  • 2020-07-18
  • 2017-11-03
  • 2023-02-22
相关资源
最近更新 更多