是否有一种方法可以通过编程方式查找默认值的数量或跳过Angular中formGroup的所有默认值?

是否有一种方法可以通过编程方式查找默认值的数量或跳过Angular中formGroup的所有默认值?,angular,observable,angular-reactive-forms,onchange,formgroups,Angular,Observable,Angular Reactive Forms,Onchange,Formgroups,我有一个formGroup,它有一些默认值,即非null。我想对此表单组中的更改做出反应,因此我使用this.FG.valueChanges.subscribe()。问题是,此方法还检测默认值并将其解释为更改。为了避免这种不受欢迎的行为,我采取以下措施: this.FG.valueChanges.pipe( startWith(1), distinctUntilChanged(), skip(8) // hardcoded ).subscribe(v =&

我有一个formGroup,它有一些默认值,即非null。我想对此表单组中的更改做出反应,因此我使用
this.FG.valueChanges.subscribe()
。问题是,此方法还检测默认值并将其解释为更改。为了避免这种不受欢迎的行为,我采取以下措施:

this.FG.valueChanges.pipe(
      startWith(1),
      distinctUntilChanged(),
      skip(8) // hardcoded
  ).subscribe(v => console.log(`new value: ${v}`));
问题是你看到的“8”是硬编码的。它表示表单组
FG
中默认值的数量

是否有办法通过编程查找默认值的数量或跳过所有默认值,以便只订阅反映用户交互的新值

编辑:

下面是一个片段,展示了如何添加默认值:

  ngOnInit(): void {
    this.FG = new FormGroup({
      minSaveFG: new FormGroup({
        currentMeasure: new FormControl({value: null, disabled: !this.editable}, Validators.required)
      }),
      currentStartDate: new FormControl({value: this.calendarInfo.startDate ? this.calendarInfo.startDate : this.initialStartDate,
        disabled: !this.editable && !this.correctionMode}, Validators.required),

在初始化之后调用subscribe。

我觉得您将异步获取这些值,并在以后分配它们,因为我看不到它在最初构建表单时触发。无论问题是什么,解决方案都是使用
emitEvent:false
,这不会使
值更改
触发:

this.myForm=this.fb.group({
input1:[“你好,{emitEvent:false}]
});
如果您也使用
setValue
patchValue
或以某种方式操纵表单的任何方法,例如:

this.myForm.get('input1').setValue('hello2',{emitEvent:false})

注意:当组件被销毁时,记得取消订阅
valueChanges

如何分配默认值?您是否有类似于
{control:this.fb.control(defaultValue)}
的功能,或者您在订阅后是否分配了默认值?我认为您应该使用
filter
操作符筛选出具有有效值的流,为什么在您提供默认值后不订阅?另一种方法是skip(this.FG.controls.length),但我不太确定最后一个想法是如何分配默认值的。初始化后我在ngInit中订阅了我编辑了我的原始帖子,以显示默认值是如何添加的。是的,那么你尝试过我的解决方案了吗?我也喜欢使用formbuilder。问题还可能是,如果您已将
FG
初始化为
new FormGroup
,并且在
OnInit
中再次调用
new FormGroup
,那么如果您两次调用它,肯定会触发值更改。(这只是一个猜测,因为我不知道您是否已经初始化了它)