Элементы управления списка форм Angular 5 или их итерация

Я использую angular 5 с formgorup и хочу повторить элементы управления, чтобы создать динамический компонент на основе формы, поля форм предоставляются внешней службой данных (базой данных и т. д.)

Он объявляется следующим образом

check = new FormGroup({
    firstName : new FormControl(true),
    lastName : new FormControl(false)
  });

Я нашел это, объясняющее, как перебирать элементы управления, но это не работает . Я пытаюсь использовать:

for(let item of this.check.controls){}

и получите это отладку хрома:

Невозможно прочитать свойство «длина» неопределенного

Я не могу получить доступ к this.check.controls.keys или keys()

Как я могу повторить ключи?

Спасибо


person thebeancounter    schedule 30.07.2018    source источник
comment
попробуй for(let item in this.check.controls){console.log(item)}   -  person Fateme Fazli    schedule 30.07.2018


Ответы (4)


попробуйте использовать метод Object.keys для получения ключей объектов

Object.keys(this.check.controls); // => ["firstName", "lastName"]

this.check.controls представляет собой структуру пары ключ/значение объекта, если вы хотите получить ключи объекта {key1:value,key2:value}, вы можете использовать метод Object.keys, который возвращает массив, содержащий ключи ['key1','key2']

person malbarmavi    schedule 30.07.2018
comment
Отлично, работает, не могли бы вы объяснить, почему это работает? - person thebeancounter; 30.07.2018

Эта форма возвращает объект значения, а не массив значений

check = new FormGroup({
        firstName : new FormControl(true),
        lastName : new FormControl(false)
      });

Если вы хотите получить ключи, вам нужно использовать метод Object.keys(), который возвращает массив имен свойств данного объекта в том же порядке, что и в обычном цикле.

KeyArray= Object.keys(this.check.controls)// ["firstName", "lastName"]

Пример: https://stackblitz.com/edit/angular-stszta

person Chellappan வ    schedule 30.07.2018

перебрать объект:

for(let item in this.check.controls){
    console.log(this.check.controls[item])
}
person Fateme Fazli    schedule 30.07.2018
comment
но это работает :( проверьте это - person Fateme Fazli; 30.07.2018

эта функция работает довольно хорошо для меня

public static ResetForm(form: FormGroup, config = {}) {
    const controls: string[] = Object.keys(form.controls);

    controls.forEach(key => {
      if (config[key] && config[key]["default"])
        form.get(key).setValue(config[key]["default"]);
      else form.get(key).setValue("");
      form.get(key).setErrors(null);
      form.get(key).markAsTouched();
    });
  }

если вы хотите установить значение по умолчанию, отличное от пустой строки, используйте объект конфигурации следующим образом.

ResetForm(this.form, {
      categories: {
        default: []
      }
    });
person Bouidia Abdelrahmene    schedule 24.11.2019