Установить значения в картуиз формы Angular 6 - PullRequest
0 голосов
/ 12 декабря 2018

Я устанавливаю ключи и значения в карту из формы, и для каждого поля я делаю проверку, если это поле не равно нулю.Я ищу лучшее решение ... чтобы сделать мой код более чистым, потому что у меня более 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 голосов
/ 12 декабря 2018
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, которые не являются правильными?Таким образом, фильтр присваивает каждому имя «a» (на первой итерации это действительно «value1») и проверяет, имеет ли form.value [a]! == значение null.Фильтры работают, если возвращают true, этот элемент проходит, если не удается, элемент склеивается из массива.

Теперь у вас есть только ключи, в которых form.value [key] не равно нулю.Так что сделайте a для каждого и установите желаемый объект карты из этого значения form.value [ключ].

form.value [ключ] - это то же самое, что и form.value.key, но так как ключдинамический, вы не можете сделать это.Вы должны написать это следующим образом: form.value [ключ].

...