我有一个 FormGroup 数组,即ratesMainArray
从@Input
父组件到子组件。每次它在父组件中的长度发生变化时,我都会ngOnChanges
通过它的special
或键值对其进行过滤,并将过滤后的数组的值存储在两个本地属性中,这当然是 type 。我需要听那个长度值的变化,但只对父数组的变化做出反应。我已经开始使用实际检测过滤后的数组值变化的方法,但是当我尝试对过滤后的数组长度做出反应时收到错误消息。normal
length
specialRates
normalRates
number
ngOnChanges
ngDoCheck
Error trying to diff '2'. Only maps and objects are allowed
这是代码的简化版本:
...
@Input() ratesMainArray: FormGroup[];
specialRates: number;
normalRates: number;
differ: any;
constructor(private differs: KeyValueDiffers) {
this.differ = differs.find({}).create();
}
ngDoCheck() {
const changes = this.differ.diff(this.specialRates);
if (changes) {
changes.forEachAddedItem(r => console.log('added ' + r.currentValue));
}
}
async ngOnChanges(changes: SimpleChanges) {
if ((this.ratesMainArray && this.ratesMainArray.length)
&& (changes && changes.ratesMainArray && changes.ratesMainArray.currentValue.length)) {
this.specialRates= this.ratesMainArray.filter(t => t.controls.isSpecialRate.value === true).length;
this.normalRates= this.ratesMainArray.filter(t => t.controls.isSpecialRate.value === false).length;
}
// ideally, I would like to do something like this:
// if (this.specialRates.valueChanges or changes.specialRates.currentValue) {
// do somthing
// } else {
// do something else
// }
}
我不一定需要使用ngDoCheck
,但由于它正在检测过滤后的数组更改,我认为这是要走的路。只是为了清楚起见,我还尝试在尝试之前使用private cd: ChangeDetectorRef
并且this.cd.detectChanges();
没有运气ngDoCheck
。
谢谢你的帮助!!