【问题标题】:Angular reactive forms form array on its own角度反应形式自己形成数组
【发布时间】:2018-07-31 04:01:11
【问题描述】:

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

  1. 姓名(文本字段)
  2. 电话(文本字段)
  3. 付款时间表(下拉菜单包含每周、每月、每年的值)
  4. 地址(文本字段)

如果从付款计划下拉列表中选择了每周,我需要在付款和地址字段之间显示一个新的输入,比如说它称为“星期几”。

这是我苦苦挣扎的部分。我基本上已经建立了这个(https://scotch.io/tutorials/how-to-build-nested-model-driven-forms-in-angular-2)tutorial,但如果整个表单不是表单数组,我就无法理解如何在彼此之间添加字段,我似乎做不到。

question-control.service.ts(来自 Angular 文档。参见:https://angular.io/guide/dynamic-form

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);

【问题讨论】:

  • 那么您尝试过什么,您正在为哪一段代码苦苦挣扎? :)
  • 只需将整个表单设为表单组。但您所描述的,您可以使用表单组对表单的各个部分进行分段,并根据其他表单输入显示或隐藏。
  • @Anthony,你不需要使用 formArray。您创建一个包含所有必要字段的 formGroup。然后根据另一个字段的值隐藏一个字段(例如使用 *ngIf)。但你不需要 formArray
  • 如果按要求设置的字段被隐藏,我预计会出现验证问题。请参阅我添加到问题中的代码。解决方案是否不需要它们,并且仅在当前显示该部分时才根据需要设置? @Eliseo

标签: angular


【解决方案1】:

我认为您的处理方式不正确。您不需要使用任何形式的数组,它使生活变得比需要的复杂得多。只需制作一个包含表单将使用的所有字段的表单。然后在需要修改其他控件有效性的控件上加上onchange方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-02
    • 2015-03-25
    • 2020-03-11
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多