在父级的 ngOnDestroy 之后未调用 Angular ngOnChanges
Posted
技术标签:
【中文标题】在父级的 ngOnDestroy 之后未调用 Angular ngOnChanges【英文标题】:Angular ngOnChanges not called after ngOnDestroy of parent 【发布时间】: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 我可以在父母中有多个这样的孩子,那我该怎么做? 【参考方案1】:我认为是因为子组件在其父组件之前被销毁。 您可以通过两个组件的 ngOnDestroy() 方法中的简单日志来检查这一点。
更新
因此,如果您想停止当前正在运行的音频,只需在子组件被销毁时执行它即可。
【讨论】:
当您更改 ngOnDestroy() 父方法中的 customModel 输入时,子组件甚至不存在,因此无法处理。 那么在这种情况下如何将数据传递给子组件呢?我在孩子中有一个音频元素,即使在父母被破坏后音频仍在播放 告诉我们更多关于您的要求 我在子组件中有一个音频元素。当父组件被销毁时,仍然可以听到来自子组件的音频 你可以在 ngOnDestroy() 子方法中处理这个以上是关于在父级的 ngOnDestroy 之后未调用 Angular ngOnChanges的主要内容,如果未能解决你的问题,请参考以下文章
在iframe窗体内 获取父级的元素;;在父窗口中获取iframe中的元素
css父级没包住子级是怎么回事,我用firebug查看,确实在父级的div中,但是就是没有包括子级的内容