【发布时间】:2017-12-28 08:10:49
【问题描述】:
我正在尝试使用*ngFor 对数组中的对象设置表单控制。根据用户的不同,有时我会在 Array 中有 1 个对象,但有时会有多个。
我的问题是我想使用循环创建一个formControlName,但我不确定如何在组件中设置表单组验证器?像下面这样设置它们意味着如果只有 1 个对象,则表单在查找另一个不存在的 formControlName 时仍然无效。
因此,如果名称为“Days”的第一个对象不在列表中,“Days”仍会在 this.form 中并显示在控件中:
数组:
indicators = [
{name:"Days",data:[250,1]},
{name:"Multiply Average",data:[3,.25,1]}
],
组件:
ngOnInit() {
this.form = this._fb.group({
"Multiply Average":['', Validators.compose([
Validators.required
])],
"Days":['', Validators.compose([
Validators.required
])],
});
};
模板:
<span
*ngFor="let i of indicators">
{{i.name}}:
<md-slider
formControlName={{i.name}}
color="primary"
[max]=i.data[0]
[thumb-label]="true"
[step]=i.data[1]
[min]=i.data[2]>
</md-slider>
</span>
任何帮助都会很棒
【问题讨论】:
-
@AJT_82 感谢您的回复。对不起,我应该更清楚。我希望能够将可变数量的字典传递给指标数组。我知道它目前适用于两个。如果我只传递
{name:"Days",data:[250,1]},那么组件中仍然会有Multiply Average的表单控制。该模板只有Days的滑块。有没有办法像循环一样动态更新这两种方法?如果您不知道指标数组的长度,我不确定是否有可能?谢谢 -
听起来你需要
FormArray,但我不能再多说,因为我不确定数组的外观,也不知道data数组是什么里面的对象是。预期的输出究竟是什么? formcontrol 应该持有什么值,只是名称? -
好的,谢谢。我现在会尝试做一个 plunkr 让它更清楚。我以前没做过,但应该可以解决
-
我为整个组件做了一个plnkr.co/edit/3wg4SUncFbJ8r1OJ1nrf?p=info。所以基本上问题是用户选择要使用的股票指标,不同的指标将需要不同数量的滑块(用户输入)发送到我的 API。我知道您可以为每个单独的滑块编写代码,但如果可能的话我想使用循环?只是因为我不想每次在指标数组中添加另一个指标时都编写更多代码?代码更新了模板中的所有内容,但不知道如何根据所选指标使控件 FormBuilder 发生变化。干杯
-
没有足够的代码来重现这个问题,例如你的数组的内容是什么。请设置示例数据,显示问题的示例数据,您问题中的当前
indicators没有?
标签: angular typescript angular-material2 ngfor