我的应用具有以下结构:
GrandParentComponent
> ParentComponent
> *ngFor
ChildComponent
前两个有一个对象数组(items
)。 ParentComponent
使用@Input()
中的GrandParentComponent
属性获取该内容。
*ngFor
ChildComponent
部分在模板中实际上是这样的(parent.component.html):
<div *ngFor="let item of items">
<div *ngIf="item.isVisible">
<!-- some code -->
<ng-container
dynamicField
[item]="item"
(onChange)="onChangeComponent($event)">
</ng-container>
</div>
</div>
在此DynamicFieldDirective中,我使用ChildComponent
创建ComponentFactory
并设置其item
属性。 (像这样:link)。
当我更改输入时,ParentComponent
和ChildComponent
都有@Output()
属性,我在ChildComponent
中调用。所以这个事件一直“冒泡”到GrandParentComponent
,在那里我更改了一些项isVisible
属性:
this.items = this.items.map(***something***);
this.items = [...this.items];
//this is the part, where I try to copy my array, so the change detection works...
在ChildComponent
中,视图已更新,但问题是,在ParentComponent
中,*ngIf="item.isVisible"
部分无法正常工作,但未更新。
为什么可能ChildComponent
已更新,但ParentComponent
没有?
感谢。