在通过 subscribe 方法在父级中操作数据后,我有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
但没有任何成功。你知道如何告诉ngOnChanges
孩子触发的角度吗?
编辑:对我有用的是在父组件 ( public change = false;
) 中创建一个属性,然后在我的 subscribe 方法中切换该属性并将其作为我的子元素的输入。这被认为是一种改变。尽管这解决了我的问题,但它看起来更像是一种非常老套的代码编写方式。