Angular 6: установить пустое поле массива формы - PullRequest
0 голосов
/ 21 сентября 2018

Я использую Angular 6Reactive form builder для создания формы.

ngOnInit() {
    this.landingPageForm = this.formBuilder.group({
      title: new FormControl('', [
        Validators.required
      ]),
      description: new FormControl('', [
        Validators.required
      ]),
      faqs: this.formBuilder.array([
        this.createFaqFields()
      ]),
    });

    this._setFormValue();
}

createFaqFields(): FormGroup {
  return this.formBuilder.group({
    question: new FormControl(),
    answer: new FormControl()
  });
}

private _setFormValue() {
    if (this.product) {
      this.landingPageForm.setValue({
        title: this.product.info.title,
        description: '',
        faqs: [],
      });
    }
  }

Я должен предварительно заполнить несколько полей, а faqs - это поле массива, в котором новые поля генерируются динамически, вызывая

onClickAddFaqField(): void {
  this.faqFields = this.landingPageForm.get('faqs') as FormArray;
  this.faqFields.push(this.createFaqFields());
}

Изначально в HTML есть только одно поле ввода faq, и оно пустое.Но выдает ошибку

"Must supply a value for form control at index: 0.

Как я могу инициализировать поле ввода массива пустым?

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Вместо использования FormControl () в createFaqFields (), попробуйте так:

ngOnInit() {
      this.landingPageForm = this.formBuilder.group({
        title:'',
        description: '',
        faqs: this.formBuilder.array([this.createFaqFields()])
      });
        this._setFormValue();
    }


    createFaqFields(): FormGroup {
      return this.formBuilder.group({
        question: '',
        answer: ''
      });
    }
0 голосов
/ 26 сентября 2018

Перепробовав все ответы и примеры из разных источников.Вот как я это решил.

private _setFormValue() {
  if (this.product) {
    this.landingPageForm.setValue({
      title: this.product.info.title,
      description: '',
      faqs: [{
        question: '',
        answer: ''
      }],
    });
  }
}

Добавлен question, answer с пустым значением в качестве первого объекта в поле faqs.

0 голосов
/ 21 сентября 2018

Думаю, я бы сделал это:

ngOnInit() {
  this.landingPageForm = this.formBuilder.group({
    title: new FormControl('', [Validators.required]),
    description: new FormControl('', [Validators.required]),
    faqs: this.formBuilder.array([])
  });

  // Try this
  // OTOH why when you set that to [] in _setFormValue()?
  this.landingPageForm.get('faqs').push(this.createFaqFields());

  this._setFormValue();
}

createFaqFields(): FormGroup {
  return new FormGroup({
    question: new FormControl(null),
    answer: new FormControl(null)
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...