У меня проблема с ngOnChanges
, который не запускается для дочернего компонента после того, как данные обрабатываются в родительском с помощью метода подписки.
В основном мой основной компонент выглядит так:
public imageGroups: IImageGroup[];
public status$: Observable<ModelStatusesModel>;
public ngOnChanges(changes: SimpleChanges): void {
if (Boolean(this.treeData)) {
this.imageGroups = this.treeDataService.convertImageGroups(this.treeData);
this.status$ = this.updateStatus();
this.status$.subscribe((status: ModelStatusesModel) => {
this.treeDataService.updateStatus(this.imageGroups, status); // this function makes changes to this.imageGroups
console.log('subscribe happened');
});
}
}
HTML:
...
<ul class="treeview-nodes-wrapper">
<treeview-branch *ngFor="let group of (imageGroups)"
[group]="group"></treeview-branch>
</ul>
...
В ветке также есть ngOnChnages:
public ngOnChanges(): void {
this._currentNodeDisabled = this.group.isDisabled;
console.log(this.group); //returns isDisables as true
console.log(this.group.isDisabled); //returns false
console.log(this._currentNodeDisabled); //returns false
}
Когда я запускаю свое приложение, в консоли появляется следующий результат:
{ ... isDisabled: true ...},
false
false
subscribe happened
Я также пытался заключить звонок внутри своей подписки в ngZone.run
, но безуспешно. У вас есть идеи, как сказать angular, что ngOnChanges
в дочернем элементе срабатывает?
РЕДАКТИРОВАТЬ: То, что мне подходит, - это создание свойства в родительском компоненте (public change = false;
), затем переключение этого свойства внутри моего метода подписки и передача его в качестве входных данных для моих дочерних элементов. Это воспринимается как изменение. Несмотря на то, что это решает мою проблему, это больше похоже на очень хитрый способ написания кода.