Ошибка Error: Cannot find control with name: '0' и Error: Cannot find control with name: '1'

Делаю форму на Angular. Вот код из файла TS

import {Component, OnInit} from '@angular/core'
import {environment} from 'src/environments/environment'
import {VehicleService} from '../../../core/service/rider/vehicle.service'
import {GetRiderService} from '../../../core/service/rider/get-rider.service'
import {FormArray, FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms'


@Component({
  selector: 'app-transport',
  templateUrl: './transport.component.html',
  styleUrls: ['./transport.component.sass']
})
export class TransportComponent implements OnInit {
  environment = environment
  transOptsForm: FormGroup

  constructor(
    public vehicleSvc: VehicleService,
    public getRiderSvc: GetRiderService,
    private fb: FormBuilder
  ) {
    this.transOptsForm = this.fb.group({
      transOptsArr: this.fb.array([
      ])
    })
    console.log('=======', this.transOptsForm)

  }
  async ngOnInit(): Promise<any> {
    await this.getRiderSvc.getVehicleTypes()
    await this.addCard()
    await this.setValue()
    console.log('ПОЛУЧИЛИ МАССИВ СЛИЯНИЯ', this.vehicleSvc.transOptsMerge)
    console.log('MASSIW', this.vehicleSvc.transOptsMerge)
  }
  createForm(): FormGroup {
    return this.fb.group({
      width: new FormControl('', [
        Validators.pattern('^[0-9]+$'),
        Validators.required
      ]),
      height: new FormControl('', [
        Validators.pattern('^[0-9]+$'),
        Validators.required
      ]),
      length: new FormControl('', [
        Validators.pattern('^[0-9]+$'),
        Validators.required
      ]),
      weight: new FormControl('', [
        Validators.pattern('^[0-9]+$'),
        Validators.required
      ])
    })
  }

  addCard() {
    for (let i = 0; i < this.vehicleSvc.transOptsMerge.length; i++) {
      let fg = this.fb.group(this.createForm())
      this.transOptsControls.push(fg)
    }
    console.log('ADD CARD', this.vehicleSvc.transOptsMerge)
  }

  setValue() {
    for (let i = 0; i < this.vehicleSvc.transOptsMerge.length; i++) {
      const options = [...this.vehicleSvc.transOptsMerge]
      console.log('ADD CARD', this.vehicleSvc.transOptsMerge)
      this.transOptsControls[i]?.setValue({
          width: options[i].max_width,
          height: options[i].max_height,
          length: options[i].max_length,
          weight: options[i].max_weight
        })

    }
    console.log('SET VALUE====', this.transOptsControls.controls[0])

  }


  get transOptsControls(): FormArray  {
    return this.transOptsForm.get('transOptsArr') as FormArray
  }



  onBlur() {
    console.log('HI')
  }
}

Вот код из верстки

<h5 class="card-title">Transport options</h5>
<div class="row no-gutters">
  <div class="card-wrap col-12 d-sm-flex justify-content-sm-around">
    <form [formGroup]="transOptsForm">
      <div class="card mx-sm-2"

           formArrayName="transOptsArr"

           style="width: 280px"
           *ngFor="let transOpt of transOptsControls.controls; let idx = index"
           [formGroupName]="idx">
        <div class="card-body">
          <div class="card-content">
            <div class="card-img">
              <!--            <img [src]="environment.api_url + transOpt.icon.url" alt="">-->
              <!--            <h6 class="card-subtitle">{{transOpt.name}}</h6>-->
<!--              <p>{{idx}}</p>-->
            </div>

            <div class="card-text">
              <mat-form-field>
                <mat-label>width</mat-label>
                <input type="text"
                       maxlength="5"
                       matInput

                       (blur)="onBlur()">
              </mat-form-field>


              <mat-form-field>
                <mat-label>height</mat-label>
                <input type="text"
                       maxlength="5"
                       matInput

                       (blur)="onBlur()">
              </mat-form-field>

              <mat-form-field>
                <mat-label>length</mat-label>
                <input type="text"
                       maxlength="5"
                       matInput

                       (blur)="onBlur()">
              </mat-form-field>

              <mat-form-field>
                <mat-label>weight</mat-label>
                <input type="text"
                       maxlength="5"
                       matInput

                       (blur)="onBlur()">
              </mat-form-field>


              <!--            <p>Max width: {{transOpt.max_width}}</p>-->
              <!--            <p>Max height: {{transOpt.max_height}}</p>-->
              <!--            <p>Max length: {{transOpt.max_length}}</p>-->
              <!--            <p>Max weight: {{transOpt.max_weight}}</p>-->
              <!--            <p *ngIf="transOpt.thermobox">Thermobox:-->
              <!--              <span >-->
              <!--                    <svg-->
              <!--                      xmlns="http://www.w3.org/2000/svg"-->
              <!--                      width="16" height="16"-->
              <!--                      fill="currentColor" class="bi bi-check2" viewBox="0 0 16 16">-->
              <!--                          <path d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z"/>-->
              <!--                    </svg>-->
              <!--                  </span>-->
              <!--            </p>-->
            </div>



          </div>


        </div>


      </div>
    </form>

  </div>
</div>

При написании строки [formGroupName]="idx" в консоль выводится ошибка Error: Cannot find control with name: '0' и Error: Cannot find control with name: '1'. В каком участке кода может быть проблема?


Ответы (0 шт):