我正在开发一个 Angular 应用程序,ngOnChanges
当组件的输入发生更改时,我会使用它来获得通知。在我的情况下,它不会被触发,因为我有一个嵌套对象数组作为组件的输入。
我有一个组件,其中我使用两个使用FormControl
相同 parent 的两个子组件FormGroup
。我将value
第一个 formControl 的 传递给第二个子组件,但是由于在数组修改时没有发生更改检测,因此我无法在第二个子组件的 Input 中获取新值。
这是我的代码:
@Component({
encapsulation: ViewEncapsulation.None,
moduleId: module.id,
selector: 'my-component',
templateUrl: 'my-component.html',
styleUrls: ['my-component.scss']
})
export class MyComponent {
myForm: FormGroup;
constructor(private fb: FormBuilder) {
this.myForm = fb.group({
documents: null,
summary: null
});
}
}
这是模板文件:
<div class="content">
<form class="ui form" [formGroup]="myForm">
<my-component-child-one [form]="myForm.get('documents')"></my-component-one>
<my-component-child-two [form]="myForm.get('summary')" [content]="myForm.get('documents').value"></my-component-two>
</form>
</div>
对第一个子组件的表单控件所做的任何更改都不会触发ngOnChanges
第二个子组件,因为它绑定的是数组引用而不是数组内容。因此,对数组的任何对象所做的任何更改或对数组本身所做的任何更改都不会更改数组引用,因此ngOnChanges()
不会被调用。
一个可能的解决方案可能是使用ngDoCheck
. 但它可能会产生可怕的代价,因为它被频繁调用。即使我应该使用IterableDiffers
and ,它也会变得很重KeyValueDiffers
。
另一种解决方案可能是订阅valueChanges
第一个 formControl,但我无法弄清楚为什么它似乎无法正常工作,有时它会错过一些更改......
在我的情况下,最好的解决方案是什么?