从Angular 6表单中将值设置为map <object,string =“”>

时间:2018-12-12 04:11:54

标签: html angular forms typescript fieldset

我将键和值从表单设置为映射,如果此字段不为null,则对于每个字段,我都会进行验证。我正在寻找更好的解决方案...为了使代码更简洁,因为我有10多个字段...

这是我的component.ts文件:

const map = new Map<Object, string>();

    if (this.form.value.value1!= null) {
        map[KEY.VALUE_1] = this.form.value.value1;
    }
    if (this.form.value.value2!= null) {
        map[KEY.VALUE_2] = this.form.value.value2;
    }
    ...

这是我的component.html文件:

<div [formGroup]="form">
                <fieldset>
                    <legend>Values</legend>
                        <mat-form-field >
                            <input matInput placeholder="value1" formControlName="value1">
                        </mat-form-field>

                        <mat-form-field>
                            <input matInput placeholder="value2" formControlName="value2">
                        </mat-form-field>
                     ...

                </fieldset>
</div>

1 个答案:

答案 0 :(得分:1)

Object.keys(form.value).filter(a => form.value[a] !== null).forEach(key => {
    map[key] = form.value[key];
});

Object.keys采用表单值(对象),并将其转换为所有对象属性的数组。因此,Object.keys将是这样的数组:在您的示例中为['value1','value2']。

接下来,您只希望form.value上不为null正确的属性?因此,过滤器将每个命名为“ a”(在第一次迭代中实际上是'value1'),并检查form.value [a]!== null。如果返回true,则过滤器起作用,如果失败,则从数组中拼接出该元素。

现在,您只拥有form.value [key]不为null的键。因此,对每个对象执行一个操作,然后从该form.value [key]值中设置所需的地图对象。

form.value [key]与执行form.value.key相同,但是由于key是动态的,因此您不能这样做。您必须像这样编写它form.value [key]。