从表单 Angular 6 中将值设置到 map<object, string> 中

Set values into a map<object, string> from form Angular 6

我将键和值从表单设置到映射中,如果该字段不为空,我将对每个字段进行验证。我正在寻找更好的解决方案...让我的代码更干净,因为我有超过 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>
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。过滤器工作如果 return 为真,则该元素通过,如果失败,则从数组中拼接元素。

现在您只有 form.value[key] 不为空的键。所以为每个做一个并从 form.value[key] 值设置你想要的地图对象。

form.value[key] 和 form.value.key 是一样的,但是因为 key 是动态的,你不能这样做。你必须这样写 form.value[key].