Angular 角反应形式本身形成阵列

Angular 角反应形式本身形成阵列,angular,Angular,我对angular的表单组和表单数组有点困惑。我知道您可以在表单组中嵌套表单数组,但是表单数组是否可以独立存在?基本上,我需要整个表单成为一个数组,我可以将“基本”控件推到其中,或者根据下拉列表中的选择在某些位置插入控件。比如说 名称(文本字段) 电话(文本字段) 付款计划(带周、月、年值的下拉列表) 地址(文本字段) 如果从payment schedule(付款计划)下拉列表中选择weekly(每周),我需要在payment(付款)和address(地址)字段之间显示一个新的输入,比如它被称为

我对angular的表单组和表单数组有点困惑。我知道您可以在表单组中嵌套表单数组,但是表单数组是否可以独立存在?基本上,我需要整个表单成为一个数组,我可以将“基本”控件推到其中,或者根据下拉列表中的选择在某些位置插入控件。比如说

  • 名称(文本字段)
  • 电话(文本字段)
  • 付款计划(带周、月、年值的下拉列表)
  • 地址(文本字段)
  • 如果从payment schedule(付款计划)下拉列表中选择weekly(每周),我需要在payment(付款)和address(地址)字段之间显示一个新的输入,比如它被称为“day of week”

    这是我正在努力解决的问题。我基本上已经建立了这个(但是我不知道如果整个表单不是一个表单数组,如何在彼此之间添加字段,这似乎是我做不到的)

    question-control.service.ts(来自angular docs.请参阅:)


    我认为您的做法是错误的。您不需要使用任何表单数组,这会使生活变得比需要的复杂得多。只需创建一个包含表单将使用的所有字段的表单。然后在需要修改其他控件有效性的控件上设置更改方法。

    那么您尝试了什么,又做了什么您正在处理的一段代码?:)只需将整个表单设置为表单组。但您所描述的是,您可以使用表单组对表单的各个部分进行分割,并根据其他表单输入显示或隐藏。@Anthony,您不必使用formArray。您可以创建一个包含所有必需字段的formGroup。然后根据其他字段的值隐藏或不隐藏字段(例如使用*ngIf)。但是,如果一个按要求设置的字段被隐藏,那么您不需要一个formarray,因为可能会出现验证问题。请参阅我添加到问题中的代码。解决方案是不需要它们,而只在当前显示该部分时按需要设置它们吗@埃利塞
    questions.forEach(question => {
    
      group[question.key] = question.required ?
        new FormControl(question.value || '', [Validators.required, Validators.minLength(question.minLength)]) :
        new FormControl(question.value || '');
    });
    
    return new FormGroup(group);