合并多个表单控件可观察对象并以反应形式进行订阅

时间:2019-05-06 19:02:17

标签: angular rxjs

我有一个带有多个输入字段的表单(例如:CID,姓氏,名字等)。要求是在表单提交上提供一个输入。因此,在任何输入字段中输入输入后,除输入字段外的其他值都需要清除

我打算不为所有控件订阅值更改,而是计划在Rxjs中使用一些运算符来组合它,并仅使用一个订阅。我发现的是CombineLatest。因此,我只是将所有控件推送到一个数组中,并计划传递给CombineLatest运算符。

我创建了一个堆叠闪电战。 https://stackblitz.com/edit/angular-xeqms6?file=src%2Fapp%2Fapp.component.ts

handleFormChanges(){

    const controlArr=[];
    for (const field in this.formControls) {
      controlArr.push(this.formEl.get(field).valueChanges);
    }

      combineLatest(controlArr)
       .pipe(map(control=>{
         startWith('')
        return control;
       }))
      .subscribe((value)=>{

        // Here I need to write the logic to clear input fields other than the current one.
        console.log(value);

      })
  }

上述代码的问题是,只有在所有字段中至少输入一次值之后,才首先触发订阅。随后的触发器按预期工作。

我需要的是在每个valuechanges上都需要调用订阅回调

1 个答案:

答案 0 :(得分:1)