防止为订阅之前发出的值调用 valueChange 订阅

时间:2021-06-15 13:34:43

标签: angular rxjs

我正在用 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 订阅。是否有任何方法/运算符可以忽略订阅之前发出的值?

0 个答案:

没有答案
相关问题