我正在用 writeValue(controlAccessor) 方法初始化表单,在编辑模式下,有可用的值,因此在此处推送这些值(我无法使用 setValue,因为到目前为止还不知道字段数)。>
this.formGroup = this._formBuilder.group({ fields: this._formBuilder.array([]) });
if (fieldsReturnFromAPI?.length > 0) {
fieldsReturnFromAPI.forEach((value: any): any => {
(this.formGroup.controls.fields as FormArray).push(this.createField(value));
});
}
在对订阅 valueChanges 的字段进行一些操作后(从这里调用 onChange 将值发送给父级)。
this.formGroup.controls.fields.valueChanges
.pipe(
distinctUntilChanged(),
skip(fieldsReturnFromAPI.length), // this is working sometime, but not seems good way
takeUntil(this.ngUnsubscribe))
.subscribe((): void => {
this.updateHiddenFields();
this.onChange(this.formGroup?.getRawValue().fields);
});
问题是,它使表格变脏。我必须限制对由软件填充的数据的 valueChanges 调用(无需用户输入)。我不能使用skip(fileds.length),因为它有时有效,有时无效。
实际上是从 intilizeForm push() 方法调用 valueChange 订阅。是否有任何方法/运算符可以忽略订阅之前发出的值?