Угловой ngOnChanges не вызывается после ngOnDestroy родительского элемента

У меня есть дочерний компонент, который принимает ввод

<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;
}

NgOnChanges дочернего компонента не вызывается, когда входной customModel изменяется в родительском ngOnDestroy. Почему это могло происходить?

У меня есть элемент audio в дочернем элементе, и звук все еще слышен даже после того, как родительский элемент был уничтожен.

NgOnChanges вызывается в других случаях, когда я меняю ввод, но не через ngOnDestroy


person user5155835    schedule 09.12.2019    source источник
comment
Если родитель умирает, умирает и ребенок, следовательно, отношение РОДИТЕЛЬ - РЕБЕНОК. Вы можете ссылаться на дочерний компонент с помощью ViewChild, а затем вызывать его метод из родительского элемента в ngOnDestroy   -  person Dino    schedule 09.12.2019
comment
@Dino У меня может быть несколько таких детей в родительском элементе, как мне тогда это сделать?   -  person user5155835    schedule 09.12.2019


Ответы (1)


Я думаю, потому что дочерний компонент уничтожается раньше своего родителя. Вы можете проверить это с помощью простого журнала внутри метода ngOnDestroy () для обоих компонентов.

Обновить

Поэтому, если вы хотите остановить текущий звук, просто сделайте это внутри дочернего компонента, когда он будет уничтожен.

person Bilel-Zheni    schedule 09.12.2019
comment
когда вы меняете ввод customModel внутри родительского метода ngOnDestroy (), дочерний компонент даже не существует, поэтому он не может с этим справиться. - person Bilel-Zheni; 09.12.2019
comment
Тогда как я могу передать данные дочернему компоненту в этом случае? У меня есть элемент audio в дочернем элементе, и звук продолжает воспроизводиться даже после того, как родительский элемент уничтожен - person user5155835; 09.12.2019
comment
просто расскажите нам больше о ваших требованиях - person Bilel-Zheni; 09.12.2019
comment
У меня есть аудиоэлемент в дочернем компоненте. Когда родительский элемент уничтожен, звук от дочернего компонента все еще слышен. - person user5155835; 09.12.2019
comment
вы можете справиться с этим внутри дочернего метода ngOnDestroy () - person Bilel-Zheni; 09.12.2019