.forEach не является функцией fromArray angular - PullRequest
0 голосов
/ 11 мая 2019

Я работаю над требованием, при котором я должен пройти через элементы управления 'formArray', определенные в файле component.ts, чтобы установить проверки при отправке формы.Я получаю сообщение об ошибке типа «.forEach не является функцией». Мой код указан ниже:

component.ts

ip_addresses_arr: any;

this.companyForm = this.fb.group({
   company_ip_addresses: this.fb.array([this.fb.group({
    id: 0,
    start_ip: new FormControl('', Validators.pattern("^([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})$")),
    end_ip: new FormControl('', Validators.pattern("^([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})$"))
  })]),
});

Мой forEachloop в formArray:

saveCompanyInfo() {
  this.ip_addresses_arr = this.companyForm.get('company_ip_addresses');
  this.ip_addresses_arr.forEach(eachfield => {
    console.log("each field",this.ip_addresses_arr);
    if(eachfield.start_ip != "" && eachfield.end_ip == ""){
      console.log("coming inside end_ip is empty");
      eachfield.end_ip.setErrors({'incorrect': true});
      eachfield.end_ip.markAsTouched();
    }else if(eachfield.end_ip != "" && eachfield.start_ip == ""){
      console.log("coming inside start_ip is empty");
      eachfield.start_ip.setErrors({'incorrect': true});
      eachfield.start_ip.markAsTouched();
    }else{
      eachfield.start_ip.setErrors(null);
      eachfield.end_ip.setErrors(null);
    }
  });

  if (this.companyForm.valid) {
    -----------------
    -----------------
  }
}

Моя проблема заключается в том, что .forEach не является функцией .Может кто-нибудь, пожалуйста, объясните мне, что не так в коде.Любая помощь будет оценена.Спасибо.

1 Ответ

0 голосов
/ 11 мая 2019

Это на самом деле проблема с задержками, машинопись и редактор жалуются на это, потому что formInstance.get('controlName') возвращает абстрактный элемент управления. Вы должны будете сказать им, что полученный вами элемент управления является FormArray, вы можете сделать это, выполнив:

this.ip_addresses_arr = this.companyForm.get('company_ip_addresses') as FormArray;

И вам нужно перебрать элементы управления как.

this.ip_addresses_arr.controls.forEach()

И вы неправильно обращаетесь к элементам управления

saveCompanyInfo() {
  this.ip_addresses_arr = this.companyForm.get('company_ip_addresses') as FormArray;
  this.ip_addresses_arr.controls.forEach(eachfield => {
    if(eachfield.get('start_ip').value != "" && eachfield.get('end_ip').value == ""){
      console.log("coming inside end_ip is empty");
      eachfield.get('end_ip').setErrors({'incorrect': true});
      eachfield.get('end_ip').markAsTouched();
    }else if(eachfield.get('end_ip').value != "" && eachfield.get('start_ip').value == ""){
      console.log("coming inside start_ip is empty");
      eachfield.get('start_ip').setErrors({'incorrect': true});
      eachfield.get('start_ip').markAsTouched();
    }else{
      eachfield.get('start_ip').setErrors(null);
      eachfield.get('end_ip').setErrors(null);
    }
  });
  }
...