【发布时间】:2018-07-31 04:01:11
【问题描述】:
我对 angular 的表单组和表单数组有点困惑。我知道您可以将表单数组嵌套在表单组中,但是表单数组可以单独存在吗?基本上我需要整个表单成为一个数组,我可以将“基本”控件推送到,或者根据下拉列表中的选择在某些位置插入控件。例如
- 姓名(文本字段)
- 电话(文本字段)
- 付款时间表(下拉菜单包含每周、每月、每年的值)
- 地址(文本字段)
如果从付款计划下拉列表中选择了每周,我需要在付款和地址字段之间显示一个新的输入,比如说它称为“星期几”。
这是我苦苦挣扎的部分。我基本上已经建立了这个(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